CS231N - Assignment 1 - Q4 - Two-Layer Neural Network
编写:郭承坤 观自在降魔 Fanli SlyneD
校对:毛丽
总校对与审核:寒小阳
1 任务
在这个练习里,我们将实现一个完全连接的神经网络分类器,然后用CIFAR-10数据集进行测试。
2 知识点
2.1 神经元
要讲神经网络就得先从神经元开始说起,神经元是神经网络的基本单位,它的结构如下图所示:
神经元不管它的名字有多逼格,它本质上不过是一个函数。就像每个函数都有输入和输出一样,神经元的输入是一个向量,里面包含了很多个 xi x i (图左边),输出的是一个值(图右边)。神经元在这个过程中只做了两件事:一是对输入向量做一次仿射变换(线性变化+平移),用公式表示就是
∑iwixi+b(1) (1) ∑ i w i x i + b
二是对仿射变换的结果做一次非线性变换,即
f(∑iwixi+b)(2) (2) f ( ∑ i w i x i + b )
这里的f就叫做激活函数。权值
wi w i
和偏置项
b b
是神经元特有的属性,事实上,不同神经元之间的差别主要就三点:权重值,偏置项,激活函数。总的来说,神经元的工作就是把所有的输入项
与其对应的权值相乘求和,然后加上偏置项
b b
,之后通过一个激活函数求得最终的值,即这个神经元的输出。
激活函数有很多种,下面介绍一个叫sigmoid的激活函数:
这个函数很有意思,它把任何一个属于值域R的实数转换成0到1之间的数,这使得概率的诠释变得可能。但是在训练神经网络的时候,它有两个问题,一是当输入的仿射变换值太大或者太小的时候,那f关于x的梯度值就为0,这不利于后面提到的反向传播算法中梯度的计算。第二个问题在于它的值不是中心对称的,这也导致梯度更新过程中的不稳定。Sigmoid的函数图像大概长下面这样:
如果现在我们把实数1也放进输入的向量中得到 x⃗ x → ,把偏置项放进权值向量中得到 w⃗ w → ,那么包含sigmoid激活函数神经元的工作就可以简洁地表示为: