目录
大多数的机器学习所涉及到的特征非常多,对于非线性分类问题,往往需要构造多项式来表示数据之间的关系,多项式的组成方式千变万化,这对计算带来一定困扰。
机器学习中的神经网络一般包括三部分,输入层,隐藏层,输出层。
数据从输入层开始,通过激活函数前向传播到第一隐藏层,经过多个隐藏层,最后到达输出层,神经网络表示复杂的逻辑关系,主要是对隐藏层的构造。
(1) 案例:使用神经网络实现逻辑运算
AND运算
OR运算
NOT运算
XNOR运算
\[\begin{align*} XNOR&=(x_1\ \&\ x_2)\ OR\ (\bar{x_1}\ \&\ \bar{x_2})\\ &=NOT(x_1 \ XOR \ x_2)\\ \end{align*} \](2) 多元分类
通过构建神经网络,每种输出就对应一个分类器。
(3) 代价函数
\(K\) 表示输出层的单元数目,\(L\) 为神经网络的层数。
代价函数:
\[J(\Theta) = -\frac{1}{m} \sum_{i=1}^m \sum_{k=1}^K \ [ \ y_k^{(i)} log^{(h_{\Theta}(x^{(i)}))_k} + (1-y_k^{(i)} log^{(1 - (h_{\Theta}(x^{(i)}))_k)} \ ] + \frac{\lambda}{2m} \sum_{l=1}^{L-1} \sum_{i=1}^{s_l} \sum_{j=1}^{s_l + 1} (\Theta_{ji}^{(l)})^2 \](4) 前向传播
(5) 反向传播
(6) 随机初始化
在对神经网络进行训练时,\(\theta\) 的取值要随机取值,如果都赋值为 0,就会使得每一层的输出值、误差相同,从而存在大量冗余。
(7) 梯度检测
为了确保反向传播算法的正确性,在数学上使用拉格朗日中值定理来近似的表是曲线上某一点的导数,梯度检测正式使用的这种思想。
梯度检测可以对每个参数进行单独验证。
\[\begin{align*} \theta^{i+} = \theta + \begin{bmatrix} 0\\ 0\\ \vdots\\ \delta\\ \vdots\\ 0\\ \end{bmatrix} \ \ \ \ \ \ \theta^{i-} = \theta - \begin{bmatrix} 0\\ 0\\ \vdots\\ \delta\\ \vdots\\ 0\\ \end{bmatrix} \\ f_i^{(\theta)} \approx \frac{J(\theta^{i+}) - J(\theta^{(i-)})}{2 \delta} \end{align*} \]假设通过中指定理的得到的梯度为 \(approx_grad\),经过反向传播得到的梯度为 \(grad\),如果满足以下等式,则说明反向传播得到的梯度精度还行。
\[diff = \frac{||approx_grad - grad||}{||approx_grad + grad||} < 10e^{-9} \]梯度计算正确的情况下,当算法进行学习的时候要关闭梯度检测,因为它非常耗时。
标签:第九章,梯度,sum,传播,神经网络,theta,grad From: https://www.cnblogs.com/lumoumou/p/17024112.html