前言

参考大佬的文章写的一篇萌新学习笔记,不足之处请多指教!

对于神经网络的理解

1.神经网络的用途

神经网络最重要的用途就是分类。

分类器:能自动对输入的东西进行分类。输入的是一个数值向量,输出的也是数值。分类器的目标就是让正确分类的比例尽可能高。

一般我们需要首先收集一些样本,人为标记上正确分类结果,然后用这些标记好的数据训练分类器,训练好的分类器就可以在新来的特征向量上使用。

2.神经元

简单来说就是能将一些数据一分为二的‘直线/平面’。

平面上的直线方程是:ax+by+c=0,等式左边大于零和小于零分别表示点(x,y)

在直线的一侧还是另一侧。把这个式子推广到n维空间里,直线的高维形式称为超平面,它的方程是:

神经网络回归之前用sigmoid 神经网络用于回归_神经网络回归之前用sigmoid


神经元就是当h大于0时输出1,h小于0时输出0的一个模型,它的实质就是把特征空间一切两半,认为两半分别属两个类。

3.神经网络

Sigmoid函数代替了MP神经元。MP神经元把直线一侧变为0,另一侧变为1,不可微,不利于数学分析,而Sigmoid函数和0-1阶跃函数类似但是更平滑。

神经元的缺点之一是只能一分为二,但对于多种混杂的数据就不能分开。
多层神经网络解决了这个问题,底层神经元的输出是高层神经元的输入。使用多个神经元对其进行分类,直到把结果拼在一起。

神经网络在理论上可以表示很复杂的函数/空间分布。但是真实的神经网络是否能摆动到正确的位置还要看网络初始值设置、样本容量和分布。

神经网络神奇的地方在于它的每一个组件非常简单——把空间切一刀+某种激活函数(0-1阶跃、sigmoid、max-pooling),但是可以一层一层级联。输入向量连到许多神经元上,这些神经元的输出又连到一堆神经元上,这一过程可以重复很多次。

神经网络的训练依靠反向传播算法:最开始输入层输入特征向量,网络层层计算获得输出,输出层发现输出和正确的类号不一样,这时它就让最后一层神经元进行参数调整,最后一层神经元不仅自己调整参数,还会勒令连接它的倒数第二层神经元调整,层层往回退着调整。经过调整的网络会在样本上继续测试,如果输出还是老分错,继续来一轮回退调整,直到网络输出满意为止。

神经网络表示

神经网络回归之前用sigmoid 神经网络用于回归_神经网络回归之前用sigmoid_02


x1,x2,x3 为感知机的输入。

神经网络回归之前用sigmoid 神经网络用于回归_激活函数_03


为加权后的结果,图中采用的是wT是将权重w矢量化表示。右半部分:

神经网络回归之前用sigmoid 神经网络用于回归_神经网络回归之前用sigmoid_04


将加权值通过”激活函数σ(z)”非线性化的最终输出结果。(现实生活中,很多分类是非线性的,因此需要通过”激活函数”将其非线性化。简单理解为激活函数作为非线性化的一种转换。)

图中”激活函数σ(z)”为sigmoid函数,其表达式和函数图像如下:

神经网络回归之前用sigmoid 神经网络用于回归_梯度下降法_05


神经网络回归之前用sigmoid 神经网络用于回归_神经网络_06


该函数输出值在(0,1)之间,适合分类,而且函数是连续可导的。

单层隐藏层的神经网络

神经网络都是很复杂的,一般是由输入层(input layer),隐藏层(hide layer),输出层(output layer)组成。隐藏层不是必须的,但是没有隐藏层的神经网络是线性的,只能处理线性可分的问题,就相当于线性的Logistic模型。

前向传播(Forward Propagation)算法

利用已经训练出的连接权重w(或称映射权重)和神经元模型中的输出公式(激活函数)来计算出每一层每一个神经元的激活值(activation,Z),最终得到输出层的激活值,也就是输出值。

一层隐藏层的神经网络:

神经网络回归之前用sigmoid 神经网络用于回归_神经网络回归之前用sigmoid_07


x1,x2,x3x1,x2,x3 是输入的样本属性值。样本数据通过隐藏层的处理,最终输出层导出我们模型处理后的结果。

红色虚线左边部分(向量化表示):

神经网络回归之前用sigmoid 神经网络用于回归_神经网络_08


其中w[1]1(1),上标[1]代表神经网络的第1层(即该例中的隐藏层),下标1代表第1层中第1个神经元,下标(1)代表z=w1⋅x1+w2⋅x2+w3⋅x3+b中的w1。

向量化后上图红色虚线左半部分的推导式如下:

神经网络回归之前用sigmoid 神经网络用于回归_神经网络_09


Z[i]j,a[i],上标[i]代表神经网络第i层,下标j为某一层的第j个神经元,第1层为图中的隐藏层,第2层为输出层。Z[1]1,Z[1]2,Z[1]3,Z[1]4就是输入数据x1,x2,x3x1,x2,x3共同作用后,作为隐藏层中不同神经元的输入值。

在隐藏层中,每个神经元通过激活函数σ(z) 将输入值Z[1]1,Z[1]2,Z[1]3,Z[1]4进行非线性化,最终隐藏层中各个神经元输出a[1]1,a[1]2,a[1]3,a[1]4。

红色虚线右边部分,隐藏层输出的a[1]1,a[1]2,a[1]3,a[1]4作为输出层的输入,共同作用后得到Z[2],最终通过激活函数σ(z)将结果进行非线性化,得到a[2]:

神经网络回归之前用sigmoid 神经网络用于回归_激活函数_10


a[2]=σ(Z[2]) 就是神经网络的输出y^。

设有m个样本数据,以上公式用伪代码来表述:

神经网络回归之前用sigmoid 神经网络用于回归_神经网络_11


神经网络回归之前用sigmoid 神经网络用于回归_梯度下降法_12

反向传播算法

正向传播,通过输入值及映射参数w,b得到输出的值。
一般我们的样本都是输入x,和输出y的值,我们需要通过训练数据得到准确的映射参数w,b的值,这个时候就需要通过我们的样本数据的训练来不断的调整这些参数值,直到这些参数能够拟合这些样本数据,才能说我们的神经网络是准确的,满足误差条件的。

梯度下降法调整参数

对每个神经元的映射参数通过梯度下降法来进行调整,拟合样本数据。

梯度下降法中代价函数:

神经网络回归之前用sigmoid 神经网络用于回归_神经网络_13


上式中θθ就是映射参数,也就是w,b。反向传播的算法就是利用梯度下降法不断的迭代,求得误差最小的映射参数w,b。伪代码表示为:

神经网络回归之前用sigmoid 神经网络用于回归_梯度下降法_14


α称为学习率learning rate,利用梯度下降法不断重复上述过程,直至收敛。

结束

感谢阅读!