从零推导神经网络之入门篇

时间:2022-04-23
本文章向大家介绍从零推导神经网络之入门篇,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

从零推导神经网络之入门篇

什么是神经网络?

可以先看逼乎这个问题下的答案:(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,看到这,也大概知道放弃了吧!