深度学习的正、反向传播与梯度下降的实例

采用3层的全连接网络,首先正向传播一次并计算误差,之后反向传播一次更新参数,最后再次正向传播并计算误差

全连接网络的具体结构如下:

输入参数(input_param):\begin{vmatrix} 2 & 0 & 3\\ 0 & 1 & 0 \end{vmatrix}

初始化第一层权重(w1):\begin{vmatrix} 2 & 3\\ 0 & 1\\ 1 & 3 \end{vmatrix}

初始化第二层参数(w2):\begin{vmatrix} 1 & 2\\ 3 & 4 \end{vmatrix}

给定预期的输出(output):\begin{vmatrix} 50 & 71\\ 1 & 3 \end{vmatrix}

1. 第一次正向传播及计算误差

进行第一次正向传播得到输出(pred):

pred = input_param * w1 * w2

\begin{vmatrix} 2 & 0 & 3\\ 0 & 1 & 0 \end{vmatrix} \times \begin{vmatrix} 2 & 3\\ 0 & 1\\ 1 & 3 \end{vmatrix} \times \begin{vmatrix} 1 & 2\\ 3 & 4 \end{vmatrix} = \begin{vmatrix} 52 & 74\\ 3 & 4 \end{vmatrix}

其中隐藏层(hidden)在第一次正向传播中各个参数为:

hidden = input_param * w1

\begin{vmatrix} 2 & 0 & 3\\ 0 & 1 & 0 \end{vmatrix} \times \begin{vmatrix} 2 & 3\\ 0 & 1\\ 1 & 3 \end{vmatrix} = \begin{vmatrix} 7 & 15\\ 0 & 1 \end{vmatrix}

计算第一次正向传播得出的结果和预期输出之间的误差(grad_pred):

grad_pred = pred - output

\begin{vmatrix} 54 & 74\\ 3 & 4 \end{vmatrix} - \begin{vmatrix} 50 & 71\\ 1 & 3 \end{vmatrix} = \begin{vmatrix} 2 & 3\\ 2 & 1 \end{vmatrix} 

误差的范数为:4.1306

2. 第一次反向传播及更新参数

第二层权重的梯度(grad_w2):

grad_w2 = hidden' * grad_pred  (注意hidden需要转置)

\begin{vmatrix} 7 & 0\\ 15 & 1 \end{vmatrix} \times \begin{vmatrix} 2 & 3\\ 2 & 1 \end{vmatrix} = \begin{vmatrix} 14 & 21\\ 32 & 46 \end{vmatrix}

hidden层的梯度(grad_hidden):

grad_hidden = grad_pred * w2'   (注意w2需要转置)

\begin{vmatrix} 2 & 3\\ 2 & 1 \end{vmatrix} \times \begin{vmatrix} 1 & 3\\ 2 & 4 \end{vmatrix} = \begin{vmatrix} 8 & 18\\ 4 & 10 \end{vmatrix}

第一层权重的梯度(grad_w1):

grad_w1 = input_param' * grad_hidden   (注意input_param需要转置)

\begin{vmatrix} 2 & 0\\ 0 & 1\\ 3 & 0 \end{vmatrix} \times \begin{vmatrix} 8 & 18\\ 4 & 10 \end{vmatrix} = \begin{vmatrix} 16 & 36\\ 4 & 10\\ 24 & 54 \end{vmatrix}

更新神经网络的两层权重(w1和w2):

new_w1 = w1 - learning_rate * grad_w1

\begin{vmatrix} 2 & 3\\ 0 & 1\\ 1 & 3 \end{vmatrix} - 0.002 \times \begin{vmatrix} 16 & 36\\ 4 & 10\\ 24 & 54 \end{vmatrix}=\begin{vmatrix} 1.968 & 2.928\\ -0.008 & 0.98\\ 0.952 & 2.892 \end{vmatrix}

new_w2 = w2 - learning_rate * grad_w2

\begin{vmatrix} 1 & 2\\ 3 & 4 \end{vmatrix} - 0.002 \times \begin{vmatrix} 14 & 21\\ 32 & 46 \end{vmatrix} = \begin{vmatrix} 0.972 & 1.958\\ 2.936 & 3.908 \end{vmatrix}

3. 第一次正向传播及计算误差

进行第二次正向传播得到输出(new_pred):

\begin{vmatrix} 2 & 0 & 3\\ 0 & 1 & 0 \end{vmatrix} \times \begin{vmatrix} 1.968 & 2.928\\ -0.008 & 0.98\\ 0.952 & 2.892 \end{vmatrix} \times \begin{vmatrix} 0.972 & 1.958\\ 2.936 & 3.908 \end{vmatrix} = \begin{vmatrix} 49.2678 & 70.0898\\ 2.8695 & 3.8142 \end{vmatrix}

计算第二次正向传播得出的结果和预期输出之间的误差(new_grad_pred):

\begin{vmatrix} 49.2678 & 70.0898\\ 2.8695 & 3.8142 \end{vmatrix} - \begin{vmatrix} 50 & 71\\ 1 & 3 \end{vmatrix} = \begin{vmatrix} -0.7322 & -0.9102\\ 1.8695 & 0.8142 \end{vmatrix}

此实误差的范数为:2.3004

因此,通过一次反向传播更新参数之后,神经网络输出的结果和预期解之间的误差减小了(4.1306 -> 2.3004)

注:在实际仿真的时候,学习率采用0.05,0.005都会导致系统无法收敛,误差越来越大。当使用0.003作为学习率时,系统误差下降。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值