神经网络的一点点理解
1、为什么要用连续的激活函数,而不是0、1那种二分布的?
答:代价函数要平滑
2、什么是神经网络?
答:
a)以识别手写数字为例,当有10000个28*28像素的手写图片,共有786个像素点,即786个输入点,每个像素用灰度值表示,取值为0到1之间(即X),设有2层隐藏层,每层16个节点,10个输出节点(0到9)。
b)首先随机设置每个像素点初始权重(W),则有786个WX+b,这时将一张图片的786个灰度值带入,经过若干隐藏层之后,10个输出节点输出了10个值,其实是10个概率(比如0.9, 0.2, 0.1, 0.3, 0.3, 0.2, 0.2, 0.1, 0.3, 0.3),1的概率最大,则此参数配置的神经网络认为此图为1,但实际是2,错了。其他9999个图片同样有对有错,我们的目的是让10000张图片整体错的别太离谱,慢慢来,但是怎么判断它错的离不离谱呢?就需要用函数来表示——即损失函数。如果图片真实是2,则用(0,0,1,0,0,0,0,0,0,0)分别是0 的概率,1的概率,2的概率……等,所以刚才那个图片的误差(损失)则可以用((0.9-0)^2 + (0.2-0)^2 + (0.1-1)^2 + ……)。当把10000张预测的损失值求平均,则是此权重参数下的损失。知道了损失,下一步就是用反向传播算法来调参使损失一点点减小。
c)输出值可以近似理解为sigmoid(Wæ+b),所以有3种方法改变输出值,分别是权重W,激活值æ,b。输出值与真实值之差共有10个,差值越大,总损失越大,所以让每个差值都减小,
首先按第一种改变权重W,按差值的比例改变最佳,因为差值越大,改变对应权重的性价比越高,权重的改变对整体越有影响。
如下图,蓝色代表正æ,红色是负,为了让sigmoid()尽量大,负数应减小。
第二种改变æ,每个输出值自己对应16个W,可以随着自己的需求改,但是倒数第二个隐藏层的16个æ是10个输出值共用的,随着其中一个的改变而不顾他人的想法,所以要根据每个输出值和自己的16个W正负来判断这16个æ对自己的有利变化,最后相加,得出对10个雨露均沾的改变趋势(图1),同理可向前一层推出相应的W和æ变化趋势,直到第一层(图2)。但是至今我们只研究了1个样本的变化,要把所有样本均反向传播一次,最后进行平均(图3)



