神经网络的前向传播
不得不承认,假设函数的格式很大程度上决定了我们所获得图像的样式,对于线性回归是与样本数据尽可能重合的那条直线,而在逻辑回归中就是所谓的决策边界。
我们观察逻辑回归中的sigmoid函数
不难发现对于theta*X这一项的存在,若是只输入单一的一次特征值,你只能得到一条为直线的决策边界。
然而我们在特征数较少时,可以人为构造二次项,三次项…再通过正则化得到一个比较符合分类的曲线。
然而当特征值众多时,二次项三次项的数量成几何级上升,训练成本昂贵。
但神经网络的出现,恰恰解决了这个问题,使得得到非线性边界变得十分方便。
由输入特征x_1经过第一层权重的处理后得到a_1,a_1现在仅仅是简单的特征值的线性组合。然而经过g函数(sigmoid)的处理再进行第二层权重的线性处理后,原本的x_1_之间的关系就变成非线性的了。这就有利于我们处理非线性问题。

由于神经网络用于处理分类问题,最后的输出结果,一般是一个0~1的值(单一分类)或者是一个向量(多种分类)。如下是一个样本特征下的h_θ_x的处理结果。

在matlab中通过代码 [value,index]=max(A) 可以读出每列元素的最大值和对应索引(索引值代表样本类型)。
代价函数
对于多元分类,因为最后的输出结果是一个向量而非逻辑单元中的一个结果。

所以对于一个K元分类,代价函数在训练集的一个样本中要累计K个单元的全部误差。所以代价函数如下:

i=1开始是因为正则化不涉及偏置单元系数。
反向传播
在实现梯度下降算法中,需要对代价函数进行求导操作

我们通过反向传播算法实现对于每个θ系数的求导。
步骤如下:

如上图所示,对于一个4层神经网络,经过一次正向传播后,我们将最后得到的结果与实际值做差,作为反向传播的新的输入量。(反向传播就是正向传播的镜像过程。)

δ(4)作为新的输入变量进过一次原权重不变的向量相乘过程

还要再进行一次运算才能得到新的δ(3)

因为

为了便于计算

传播终止于δ(2),因为δ可以理解为是一个与实际结果的偏差值,而作为第一层输入的是特征值,并没有偏差。
导数与δ关系如下

以下是实现梯度计算的代码思路

最后两项中j=0 不添加正则项。
θ初始化问题
如图所示,因为每条线上的权重都一样,所以不管正向反向得到的每列θ和δ都是一样的。
又因为

所以每列的θ值最终都相同。
代码实现



代码实现-反向传播
第三层输出单元为k,则y的结果亦对应一个k元向量 ,y是一个K x M的矩阵,y=

我们求出δ(3)向量,亦是一个K x M的矩阵。


因为θ(2)的大小为 (P+1)x K,因此θδ大小为(P+1)x M,且a(2)大小也为(p+1)x m
delta应减去首行

delta大小为p x m
我们利用for循环 每次取出一个样本值。设取出的第一个样本值为


利用for循环对这个θ(2)矩阵不断累加。可得所求D
本文深入探讨了神经网络的前向传播过程,解释了如何通过激活函数将线性关系转换为非线性关系,从而解决复杂分类问题。同时,详细介绍了反向传播算法,用于计算代价函数的梯度,实现权重更新,包括δ值的计算方法和正则化的处理。
2478

被折叠的 条评论
为什么被折叠?



