本课程笔记是基于今年斯坦福大学Feifei Li, Andrej Karpathy & Justin Johnson联合开设的Convolutional Neural Networks for Visual Recognition课程的学习笔记。目前课程还在更新中,此学习笔记也会尽量根据课程的进度来更新。
今天终于可以开始讲神经网络啦~~
1.一个简单的介绍
我们先把那些关于人脑、神经什么的东西抛到一边,来简单地理解下神经网络。在linear classification那一章,我们是通过计算输入图片属于不同类别的score来判断它到底属于哪个类的,即 s=Wx ,其中W是参数矩阵,x是由输入图像的所有pixel组成的一个特征列向量。比如以CIFAR-10为例的话x就是[3072*1]的列向量,W是[10*3072]的矩阵,因此输出是10个类别得分。
那么在神经网络中,计算score的方法有所不同: s=W2max(0,W1x) 。其中 W1 也是一个参数矩阵,他可以把原始图像特征x转变成比如说100维的中间层向量特征 (则此时W1应为[100*3072]维)。函数max(0,~)是一个非线性函数,对矩阵中小于0的元素置零而保留大于0的元素值不变。这个非线性函数我们有多种选择(后面会讲),不过这一个是比较常用的,简单地通过0阈值来激活元素值。最后, W2 则应该是一个[10*100]的矩阵,这样我们最后还是得到了10个类别得分。其中 W1 , W2 就是通过之前所说的随机梯度下降法学习到的,其中用到反向传播算法来计算每一步更新的梯度哦(不了解这部分内容要去戳一下我前面的课程笔记了啊)。注意非线性函数部分(也称为激活函数),是神经网络中很重要的一个部分,但是即使我们把非线性函数部分去掉,把 W1x 直接和 W2 相乘我们也可以得到10个类别得分,但是这样就少了一些扰动(wiggle),影响泛化性能等。
同样的,3层的神经网络会长这个样子: s=W