backpropagation

 http://deeplearning.stanford.edu/wiki/index.php/%E5%8F%8D%E5%90%91%E4%BC%A0%E5%AF%BC%E7%AE%97%E6%B3%95

 反向传播算法的思路如下:给定一个样例 \textstyle (x,y),我们首先进行“前向传导”运算,计算出网络中所有的激活值,包括 \textstyle h_{W,b}(x) 的输出值。之后,针对第 \textstyle l 层的每一个节点 \textstyle i,我们计算出其“残差” \textstyle \delta^{(l)}_i,该残差表明了该节点对最终输出值的残差产生了多少影响。对于最终的输出节点,我们可以直接算出网络产生的激活值与实际值之间的差距,我们将这个差距定义为 \textstyle \delta^{(n_l)}_i (第 \textstyle n_l 层表示输出层)。对于隐藏单元我们如何处理呢?我们将基于节点(译者注:第 \textstyle l+1 层节点)残差的加权平均值计算 \textstyle \delta^{(l)}_i,这些节点以 \textstyle a^{(l)}_i 作为输入。

 

 

$ \delta 3=\frac{d Error}{d x_3}=frac{d 1/2*(t-y_3)^2}{d x} =-(t-y_3)*y_{3}^{'} $

 

$ \delta 2=\frac{d Error}{d x_2}=\frac{d E}{d x_3} \frac{d x_3}{d y_2} \frac{d y_2}{d x_2}= \delta 3*w2*y_{2}^{'} $

计算我们需要的偏导数,计算方法如下:

($a^(l)_j$是activation, j是前一层,i是后一层)

\begin{align} \frac{\partial}{\partial W_{ij}^{(l)}} J(W,b; x, y) &= a^{(l)}_j \delta_i^{(l+1)} \\ \frac{\partial}{\partial b_{i}^{(l)}} J(W,b; x, y) &= \delta_i^{(l+1)}. \end{align}

backpropagation_第1张图片

是sum上面一层,而forward是sum下面一层。

 

backpropagation_第2张图片

 

 

若不是sigmoid,则$\Delta wi=exi$

还有一个问题,当f(x)接近1或接近0时,gradient非常小,几乎为0,这时没法更新weight,错误无法修正

 backpropagation_第3张图片

tj只有当是结果是才为1,其余时候为0.

 

 

转载于:https://www.cnblogs.com/huashiyiqike/p/3252641.html

你可能感兴趣的:(php)