机器学习基础(三)-NeuralNetwork

NueralNetwork模型

一个神经元通常具有多个树突,主要用来接受传入信息;而轴突只有一条,轴突尾端有许多轴突末梢可以给其他多个神经元传递信息:

机器学习基础(三)-NeuralNetwork

据此建立的神经元模型如下,其中σ函数被称为“**函数”,实际起到“约束函数”的作用,通常是使用g来表示,这里目的是表明“**函数”使用的是Sigmoid函数,其他常见的**函数有“Relu”,”Tanh”,”Leaky Tanh”等等。

机器学习基础(三)-NeuralNetwork

这里用一个简单的2层网络来介绍后续使用的模型:

机器学习基础(三)-NeuralNetwork

其中L0层为输入层,L1层为隐藏层,L2层为输出层,通常输入层不会计入层总数中,所以这是一个2层的神经网络。 aj[l]表示第l层的第j的神经元节点。

其中还隐藏了一些参数:

a[l]=g(z[l])=g(W[l]a[l1]+b[l])

W[l]={w1[l],...,wn[l]}T


前向传播

使用前述介绍提到的公式:

a[l]=g(z[l])=g(W[l]a[l1]+b[l])

W[l]={w1[l],...,wn[l]}T

如此逐层计算得到输出即可。


后向传播

后向传播指的就是求出loss函数对于各层各参数的梯度的过程,实际得到的就是各层各参数的变化对于最终结果的影响程度。

loss(W[1],b[1],W[2],b[2],...,W[L],b[L])=1mi=1m(y^y)2

根据链式法则则可以得出:

dlossdW[L]=dlossda[L]da[L]dz[L]dz[L]dW[L]

由于后续的实例为一个分类问题,所以这里dlossda[L]为二分类问题的结果,不同问题下这个结果会有不同,设计框架时需要独立出来。

dlossda[L]=1m(ya[L]1y1a[L])

dz[L]dW[L]=a[L1]T

dz[L]db[L]=i=1mz[L][:,i]

所以我们只需要得出loss(a[L]),然后使用a[l](W[l])=a[l](z[l])z[l](W[l]),a[l](b[l])=a[l](z[l])z[l](b[l])重复进行各层计算即可,注意各层间的关系z[l](a[l1])=W[l]T不要忘记加入链中。

以上为基础深层神经网络的基本思路,详尽描述待补充

基于numpy和Tensorflow的实现代码见:https://github.com/Alnlll/ML/tree/master/NN