目录
1 神经网络
你有好多排的神经元,每一排的神经元数目是不固定的,每层之间的神经元是两两相互连接的,把这样的网络称为神经网络。整个神经网络需要一组输入,例如对Layer 1的每个神经元来说,它的输入就是输入层的每一个维度;对于Layer L的神经元,它的后面没有接其他东西,它的输出就是整个神经网络的输出。
上图中的Input称为输入层,output称为输出层,其余层称为隐藏层。而所谓的deep就是指有很多隐藏层。
在2012年时,参加ImageNet比赛得到冠军的Alexnet有8层,错误率是16.4%;在2014的时候,VGG错误率是7.3%;22层的GoogleNet错误率降到了 6.7%;在2015年,引入了残差连接的Residual Net有152层,错误率为3.57%
神经网络的运作常常用矩阵运算来表示。假设第一层隐藏层的两个神经元的参数w分别是1,-2;-1,1,可以把他们排成一个矩阵,当我们要用输入层的1,-1进行运算时,可以把输入层的数值写成一个向量
,最后
,如果是sigmoid激活函数,经过该函数后,值为
假设每一层的参数按照如下图定义,那么输出层的y要怎么计算?
通过 计算出第一层隐藏层的输出值
;通过
计算出第二层隐藏层的输出值
;通过这样的方法一层一层的计算下去,计算
得到最终的输出y。也就是:
2 定义函数的好坏
假设做手写数字辨识,现在有一张图片和对应的标签。让图片通过神经网络后,得到一个输出y。计算y和
之间的Cross Entropy,然后用梯度下降算法不断地调整参数,使得Cross Entropy越来越小。
在整个数据集中,我们有很多样本,通过神经网络可以得到一个预测值y输出,我们把所有的预测值和真实标签之间的Cross Entropy加起来,得到一个总loss值。
然后,我们在函数集中找到一个使得总loss最小的函数。
3 梯度下降
把所有的参数写成一个向量,用表示,先给每个参数一个随机的初始值;计算每一个参数对于Loss的偏微分,把这些偏微分写在一个向量
中;每一个参数减去学习率乘以偏微分的值,就可以得到一组新的参数。反复执行这样的操作,就可以找到一组好的参数