简介:
卷积神经网络,初学者最开始就是从这六个字理解,对卷积神经网络学习了快一个月了,从最开始只知道这六个字,到理解为什么叫卷积神经网络,然后具体又做了使用了tensorflow练习关于mnist和CIFAR10数据集的卷积神经网络,啊啊,最开始练习这些代码,只能从代码上理解到底干了什么,对卷积神经网络的思想还是不明白,云里雾里,前不久刚刚想懂里边的套路。
卷积神经网络:
这一段,就开始理解到底是上面,对于使用卷积神经网络的,肯定不是那些线性规划问题,学习理解卷积神经网络,必须知道一些简单的分类问题,比如学习mnist,使用简单的梯度下降法可以达到准确度93%左右(当然不是很高):
来个数学公式吧:Y=softmax(W*X+b)
其中X:上面的大矩阵,代表一次输入
W:最开始定义的一个[784,10],初始值随机分配
Y:输出,一个[batch,10]的矩阵,10的含义是输入只是10个数字里边的。
softmax函数:将得到的W*X这个矩阵的每一行里边的每一个数转化为该数在改行的比例。例如[0.7 , 0.1 , 0.1 ... ]相当于算出来的结果是数字0。
当然还会涉及到Y_,就是一般书上的Y头上加一个波浪那个变量。一般都是监督学习,有输入,并且知道每一个输入对应的正确输出Y_(也是一个[batch,10]的矩阵),例如数字0的Y_:[1,0,0,0,0,0,0,0,0,0]、数字1的Y_:[0,1,0,0,0,0,0,0,0,0]等等,以此类推。
如何评价Y和Y_的差距——损失函数(loss function):
第一次训练,W是随机值,肯定计算出的Y_很不准,那么如何衡量这种差距,就是损失函数,损失函数有很多:
方差:高中求线性回归方程用的就是以最小方差的方式,画出一条回归直线
这里我们比较喜欢使用交叉熵(cross entropy)= Y_*log(Y)
从输入到输出属于前向传播,求出交叉熵改进W属于后向传播:
那好了,当我们第一次计算出交叉熵比较大,我们的目的就是求W = argmin(Y_*log(Y))——就是求出最小交叉熵时的W值,以前数学求最小值、最大值问题都是喜欢使用导数,嗯嗯,这就引出了后向传播:我们根据求出的交叉熵值沿着此时W点梯度的方向减小W值。其目的就是慢慢根据梯度使W值走向使交叉熵变小的方向。
卷积神经网络理解:
这里分享一个链接,使用3D图的效果展示每一个卷积过程结果:http://scs.ryerson.ca/~aharley/vis/conv/
在初学卷积神经网络时,一直在想,一张图片一层一层卷积后,其卷积后的图片与原始图片有什么关系,好多描述都只是:卷积得出图片的特征,那么这些特征到底又是些什么。最后感觉到:这些特征的重点不是原图像的具体什么特征,因为从人视角上看,卷积几次后得到的那些特征图片还真看不出是原图像的什么部位的什么特征,体会如下:
可以增加学习数据量:
对于一个图片32x32,只有一个通道,那么经过多层卷积后,例如就要64个通道了,那么使用这64个卷积图片识别原始图片精度就更高了,就从人识别某一个人的角度看,我们识别这个人会从多个特征识别:脸(权重最大,一般脸一样基本就是同一个人)、身高(只是普通的特征)、声音等等,那么这些特征在一张图片的卷积神经网络里,就是不同的通道。
神经网络:
从记忆的角度,神经元越多,记得越快越久,以为简单的理解就是神经元越多,就能记住这个物体的更多特征。就像卷积神经网络里边,每一层就包括很多神经元,越多,得到的是该图片的特征越多(从数据的角度看,是原始图片的特征)