没错,鸽了这么久我心里波澜不惊。
有任何问题可以找我,不过记得先请我吃饭。
写完这篇,我不会再用word编写公式了
从零推导神经网络之入门篇
什么是神经网络?
可以先看逼乎这个问题下的答案:(https://www.zhihu.com/question/22553761)。
在有了基本概念后(没有也ojbk),我们往下走。
为了实现上述分类功能,我们可以采用如下的一种模型:
假设输入向量为,我们让输出为y=1或y=0(二分类问题)
以垃圾邮件识别为例,输入向量即为每个词汇出现的次数(频率),让输出y=1为垃圾邮件,为普通邮件。
【Tips:这种分类模型可以使用感知器或者逻辑回归(感兴趣的可以看历史文章了解更多)】
这种单个的模型,我们将其称为神经元,模型所使用的方法,称为激活函数。通过激活函数对输入向量的计算,我们就能得到分类结果(第二部分有解释)。
单个神经元能应付很多日常的问题,但是,有时候,单独的一个神经元并不能实现某些功能,如。
然而机智的人们发现,用两个神经元拼接起来就能实现这个功能。
进一步的,多个神经元,很多个神经元,非常多个神经元,当一家人整整齐齐团团圆圆时,我们虽然不知道发生了什么,但他们就是可以实现很神奇的功能。
所以,神经网络就引入了出来。
同样的输入,同样的输出,只不过过程变得复杂,让很多个神经元一起工作,其中一些神经元为另一些神经元服务罢了。
·神经网络的基础函数
1、Sigmoid函数
在神经网络中,我们一般采用Sigmoid函数作为激活函数。
Sigmoid函数也称为Logistic函数,它可以将数字转换到区间(0,1)之间,并且具有可求导等良好的数学特征。
【TIPS:感兴趣的可以看Logistic Regression逻辑回归】
函数公式:
函数图像:
然后,我们来看看PPT的这张图(emmm,其实画的挺好的)。这是一个神经元的计算例子:
具体点的例子,仍然是上面那个孤独的神经元:(两张图片是等价的)
每个神经元发生了两步:
每一层的神经元都这样计算一遍~
这就是前向传播,简单的1b,套公式就行:
这就是前向传播。
额外的,Sigmoid函数求导(后面要用):
2、损失函数
在一般模型中,我们都会定义一个Cost Function损失函数。
这样的模型中,最优化问题最小化损失函数。
【TIPS:感兴趣的可以看看Gradient Descent梯度下降
Convex optimization凸优化】
为了方便计算,神经网络中,我们定于Cost Function为
【TIPS:真的只是为了方便计算,因为平方误差对于逻辑回归是非凸的)】
(损失函数可以理解为真实值与预测值的差,故只看输出层)
·后项传播推导
Emmm,是这样的,我们站在宏观上来看,如果要使一个模型尽量好,那么我们认为可以调节的只有参数,所以后向传播是“用来调整参数的值”从而“提高模型精度”。
比如:
PPT的这个ANN中,InputVector输入向量已经确定了,为(1,0,1),我们要做的就是调整
这些玩意儿,从而使输出和预期的一样。
开始推导:
单个神经元如下:
我们来看看,对于一个神经元(PPT中的神经元6),他的输入我们当成是Z(PPT中为I),(bias跟着别人跑路了,就不管他了),通过激活函数,那么输出是。
时刻记住,后向传播本质只是链式求导
我们定义每个结点的误差(the error at each node),也就是PPT中的Err为
(Z=PPT中的I)。
【这就是Err的数学来源】
这么做1是因为,方便后续计算,2是因为对输入求导符合直观理解。
以输出层为例子:神经元j(可以直接替换成j=6)Err6的来源:
同样的,各个隐藏层也是这么推导的
对于神经元4,就是神经元4的输入():
推导出来后,那么对各个参数的导数就很容易得到啦~比如:
,一阶求导就是答案
最后,就是更新权重(即w家族了)
PPT上直接更新了参数值:l是步长;
为什么这么做呢,感兴趣的查查看梯度下降法,我就不多讲了,不感兴趣的知道公式为:
即可。
——————————————————————————————————
GG,看到这,也大概知道放弃了吧!
领取专属 10元无门槛券
私享最新 技术干货