本文来自作者 sherry 在 GitChat 上分享 「神经网络入门:正反向传播推导、CNN 初识」
编辑 | 伏特加
单个神经元结构
对于单个神经元,如果我们给每一个输入一个权重,例如有三个输入(x1,x2,x3),相应的权重为(w1,w2,w3),则输入对于输出的影响为 WX^T=(w1*x1+w2*x2+w3*x3)。
现在,设定如果该值大于阈值 threshold,那么输出1;如果该值小于阈值,则输出0。用 bias=-threshold,可将上述描述简单化。
令 bias = - threshold,则:
有了上面的设定,我们就可以模拟是非问题,假设要判断一个图片中是否有狗,output=1 表示有,output=0 表示没有,我们只需要看给定权重(W)和偏置(Bias)的情况下,通过给定输入看输出就可以得到我们想要的信息了。
为了描述更细微的变化,我们将 output 的值域由0和1转变为 [0,1],该任务可以用 sigmoid 函数完成。
神经网络结构
由多个神经元组成的结构就称作神经网络。
关于神经网络的几个术语:
前向传播
梯度下降法求解
反向传播
等等,可能看了很多资料也云里雾里搞不清楚它们是干什么的,这里希望我的讲述能够带您走出此迷宫!
正如,我前面所说的,给定权重和偏置的基础上,输入对应输出,输入层 (input_1,input_2,input_3) 作用于隐藏层,得到三个中间值 (a_1,a_2,a_3),这三个中间值再作用于输出层得到最终的输出值 output,这一过程就是正向传播。
也就是,有了权重和偏置,我们的模型就确立了,给定输入,计算可得输出。
那么,问题来了,如果我们有一堆训练数据,我们怎么得到模型呢?也就是说我们如何获得模型中对应的权重和偏置呢(像上面的简单模型中,我们有33+3+31+1=16个参数)?
这是一个参数估计的过程。
插句话:模型是由参数决定的,那么常常就涉及这两个问题:模型参数已知,由输入计算输出;模型参数未知,由数据和一些数学方法进行参数估计。
我们用最小化输出差来完成参数的估计。
目标函数:
假设 a 为 x 对应的真实值,y(x) 为通过网络模型计算得到的输出值。两者差值越小,说明模型参数越合理,这是无需多言的。此外,目标函数的参数只有 W 和 B,此行的目标便是求得使目标函数最小的 W 和 B。
该问题一般使用梯度下降法进行解决。
权重和偏置的更新方程:
如果能够已知偏导数,则迭代至目标函数收敛即可。
那么现在的问题就是,如何求得网络模型中那么多参数的偏导?这里就用到了传说中的 BP 算法(也称 Back-Propagation,或反向传播算法)。
BP 算法的目的就是解决下图所示的问题。
BP 的核心是四个公式(四个公式的推导后续会补充到读者圈里):
公式1,得到由 y 和 a^L (真实值)求的最后一层的偏差 delta^L。
公式2,由下一层的偏差推导出上一层的,如下:
由公式1和公式2就可以求得网络中所有的 delta_j^l,再结合公式3和公式4,就可以求得所有的偏导,进而使用梯度下降法进行迭代。
如此,参数估计算法流程如下:
step1:初始化权重和偏向(Weights and Bias);
step2:输入参数x,设置输入层的 activation a^{input} = x;
step3:正向更新,对于 l1、l2...,L 计算激活值(也就是每个神经元的输出);
step4:计算输出层误差。
step5:反向更新得到各层的误差。
step6:得到各个偏导值。
step7:得到更新后的权重和偏置。
使用更新后的权重和偏置重新计算,直到目标函数收敛,也就是前后两次的值基本不变。
总结
参数决定模型(在神经网络中,决定神经网络模型的就是其对应的权重和偏置),常常涉及的两个问题就是已知模型参数,由输入计算输出和参数估计问题;
正向传播:已知模型参数(权重和偏置),求不同输入下输出的过程;
BP的核心是四个公式,目的在于计算偏导数,用于使用梯度下降法最小化目标函值。
下面讲述几个与上述过程紧密相关的问题。
问题一:输出层饱和,学习速率慢。
问题二:梯度消失和梯度爆炸
问题三:过拟合(Overfitting)
阅读完整原文
扫描下方二维码
并与作者交流