深度学习(一):神经网络和反向传播
2017-10-14 15:22
621 查看
从这一节开始,将介绍神经网络的相关内容。
博客不以介绍基本概念为主,而是注重一些浅显的推到和证明过程,以帮助理解。
如果你对神经网络一窍不通,你应该去看神经网络与深度学习
该博客可以看做是对于该文章的摘要。
上述图片显示了神经网络的数据流动。
其中的每一个圆圈表示一个神经元。
一般对于神经元的描述如下:
一个神经元有几个输入和一个输出,多个输入和其权重相乘后在相加,其和通过和一个权重比较来决定输出的值。
用公式来表示就是:
a=σ(wx+b),x=(x1,...,xn)T,w=(w1,...,wn),b∈R
即x为输入,w为权重,b是一个实数,代表偏置,σ(x)是从输入到输出的映射,a为对应的输出。
如果你阅读过前面机器学习的内容机器学习(二):逻辑回归或者机器学习(四):损失函数,就知道了可以使用跃阶函数和sigmoid函数作为判断输出值的标准,并会明白一般我们喜欢使用sigmoid函数。
同样的,一般来说,神经网络也采用sigmoid函数作为从输入到输出的决定标准。
神经网络的代价函数如下:
C(w,b)=12n∑x||y−a||2
y是对应于x的label,a是对应于x的神经网络输出值。
a是用过一系列的矩阵相乘,和sigmoid函数计算出来的。
目标是使得C(w,b)最小,其中w,b是参数变量,参考前一篇博客机器学习(三):梯度下降法,我们将使用梯度下降方法。
若能得到∂C∂w和∂C∂b,就能得到梯度下降的跟新规则:
w′k=wk−η∂C∂wkb′l=bl−η∂C∂bl
那么接下来的重点就是对于中间的结果,如何求解梯度了。
一个神经网络中的所有参数如下:
从l−1层的第i个神经元到第l层的第j个神经元的权重是wlji。
则第l层的的第j个神经元的输出为
alj=σ(∑i=1kwljial−1i+blj)
为了简洁,可以使用矩阵的表示形式:
al=σ(wlal−1+bl).
同时引入一个中间变量:
zl≡wlal−1+bl
zl被称为带权输入。
下面将开始反向传播中梯度的推导。
δlj=∂C∂zlj
该定义可以理解为第l层的第j个神经元上的误差。
注意到这里的L,他是最后一层神经元,即结果层。
δlj=∂C∂zlj=∑k∂C∂zl+1k∂zl+1k∂zLj
然后展开,因为知道z之间的前后关系(具体过程可能有点复杂,这里先不贴出详细的推到了),因此可以找出最后的化简结果:
δlj=∑kwl+1kjδl+1kσ′(zlj)
∂C∂blj=δlj
同理可得:
到最后根据公式3和公式4,终于可以得到梯度的公式了。
因为梯度的推到是从后往前,因此称为反向传播。
博客不以介绍基本概念为主,而是注重一些浅显的推到和证明过程,以帮助理解。
如果你对神经网络一窍不通,你应该去看神经网络与深度学习
该博客可以看做是对于该文章的摘要。
概念图
上述图片显示了神经网络的数据流动。
其中的每一个圆圈表示一个神经元。
一般对于神经元的描述如下:
一个神经元有几个输入和一个输出,多个输入和其权重相乘后在相加,其和通过和一个权重比较来决定输出的值。
用公式来表示就是:
a=σ(wx+b),x=(x1,...,xn)T,w=(w1,...,wn),b∈R
即x为输入,w为权重,b是一个实数,代表偏置,σ(x)是从输入到输出的映射,a为对应的输出。
如果你阅读过前面机器学习的内容机器学习(二):逻辑回归或者机器学习(四):损失函数,就知道了可以使用跃阶函数和sigmoid函数作为判断输出值的标准,并会明白一般我们喜欢使用sigmoid函数。
同样的,一般来说,神经网络也采用sigmoid函数作为从输入到输出的决定标准。
代价函数
义同损失函数,我们需要一个标准来优化神经网络。神经网络的代价函数如下:
C(w,b)=12n∑x||y−a||2
y是对应于x的label,a是对应于x的神经网络输出值。
a是用过一系列的矩阵相乘,和sigmoid函数计算出来的。
目标是使得C(w,b)最小,其中w,b是参数变量,参考前一篇博客机器学习(三):梯度下降法,我们将使用梯度下降方法。
若能得到∂C∂w和∂C∂b,就能得到梯度下降的跟新规则:
w′k=wk−η∂C∂wkb′l=bl−η∂C∂bl
那么接下来的重点就是对于中间的结果,如何求解梯度了。
反向传播(backpropagation)
在介绍这一节前,将详细规定一下各参数。一个神经网络中的所有参数如下:
从l−1层的第i个神经元到第l层的第j个神经元的权重是wlji。
则第l层的的第j个神经元的输出为
alj=σ(∑i=1kwljial−1i+blj)
为了简洁,可以使用矩阵的表示形式:
al=σ(wlal−1+bl).
同时引入一个中间变量:
zl≡wlal−1+bl
zl被称为带权输入。
下面将开始反向传播中梯度的推导。
梯度推导
再推倒前,先引入一个中间结果,因为最后的形式会用到这个中间结果,即:δlj=∂C∂zlj
该定义可以理解为第l层的第j个神经元上的误差。
公式1
δLj=∂C∂zLj=∂C∂aLj∂aLj∂zLj=∂C∂aLjσ′(zLj)注意到这里的L,他是最后一层神经元,即结果层。
公式2
根据公式1,可以求得最后一层的误差,那么知道知道了各层误差间的关系,就能求得所有层的误差项了。δlj=∂C∂zlj=∑k∂C∂zl+1k∂zl+1k∂zLj
然后展开,因为知道z之间的前后关系(具体过程可能有点复杂,这里先不贴出详细的推到了),因此可以找出最后的化简结果:
δlj=∑kwl+1kjδl+1kσ′(zlj)
公式3
因为zl≡wlal−1+bl,因此可以很容易得到:∂C∂blj=δlj
同理可得:
公式4
∂C∂wljk=al−1kδlj到最后根据公式3和公式4,终于可以得到梯度的公式了。
因为梯度的推到是从后往前,因此称为反向传播。
相关文章推荐
- TensorFlow 深度学习框架 (2)-- 反向传播优化神经网络
- TensorFlow 深度学习框架 (2)-- 反向传播优化神经网络
- TensorFlow 深度学习框架 (2)-- 反向传播优化神经网络
- TensorFlow 深度学习框架 (2)-- 反向传播优化神经网络
- 神经网络与深度学习学习笔记:正向传播与反向传播(未完)
- TensorFlow 深度学习框架 (2)-- 反向传播优化神经网络
- TensorFlow 深度学习框架 (2)-- 反向传播优化神经网络
- TensorFlow 深度学习框架 (2)-- 反向传播优化神经网络
- 深度卷积神经网络学习笔记2:步长不为1的卷积前向传播和反向传播
- TensorFlow 深度学习框架 (2)-- 反向传播优化神经网络
- 深度学习torch之三(神经网络的前向传播和反向传播以及损失函数的基本操作)
- TensorFlow 深度学习框架 (2)-- 反向传播优化神经网络
- TensorFlow 深度学习框架 (2)-- 反向传播优化神经网络
- TensorFlow 深度学习框架 (2)-- 反向传播优化神经网络
- TensorFlow 深度学习框架 (2)-- 反向传播优化神经网络
- TensorFlow 深度学习框架 (2)-- 反向传播优化神经网络
- TensorFlow 深度学习框架 (2)-- 反向传播优化神经网络
- TensorFlow 深度学习框架 (2)-- 反向传播优化神经网络
- TensorFlow 深度学习框架 (2)-- 反向传播优化神经网络
- TensorFlow 深度学习框架 (2)-- 反向传播优化神经网络