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

采用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作为学习率时,系统误差下降。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
深度学习协同过滤算法是一种基于神经网络的推荐算法,它可以利用用户历史行为数据和物品属性数据来预测用户对未知物品的喜好程度。下面是一个深度学习协同过滤算法的实例: 假设我们有一个用户-物品矩阵,其中每行表示一个用户,每列表示一个物品,矩阵中的值表示用户对物品的评分。我们可以用这个矩阵来训练一个深度学习模型,以预测用户对未知物品的评分。 首先,我们需要将用户-物品矩阵转换为一个稀疏矩阵,其中每个非零元素表示用户对某个物品的评分。然后,我们可以使用神经网络来对这个稀疏矩阵进行建模。 具体地,我们可以使用一个多层感知机(MLP)来对用户和物品进行表示。对于每个用户和物品,我们可以将它们的表示向量输入到MLP中,以预测用户对未知物品的评分。MLP的输入层包含两个子层,分别表示用户和物品的向量表示。随后,我们可以通过多个隐藏层来学习用户和物品之间的非线性关系。最后,MLP的输出层给出了用户对未知物品的评分。 为了训练这个深度学习模型,我们可以使用反向传播算法来更新网络中的权重和偏置。我们可以使用均方误差(MSE)作为损失函数来度量模型的性能,并使用随机梯度下降(SGD)来最小化损失函数。 最后,我们可以使用训练好的深度学习模型来预测用户对未知物品的评分。对于每个用户,我们可以将其表示向量输入到MLP中,并预测其对所有未评级物品的评分。然后,我们可以根据预测评分的大小来推荐给用户最相关的物品。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值