前言
推荐系统中,我们通常用深度神经网络(DNN)来学习高阶(非线性)特征。这篇博客中,我们将详细介绍DNN的BP算法。
DNN
我们可以将DNN分成三个部分,
- 输入层
- 隐藏层
- 输出层
接下来,我们以三层DNN为例。
1. 输入层
对于输入层,我们假设输入数据有
个特征,即
2. 第一层隐藏层
第一层隐藏层的输出为维向量,这样,从输入层到第一层隐藏层,可以看做是从
维到
维的转化。我们需要
- 权重矩阵
,将
维列向量转化为隐藏层
维列向量
- 激活函数
,对
维列向量的每一个元素做激活处理(常用的激活函数有sigmoid,Relu等)
我们将权重矩阵重写为
其中,为
维列向量。这样,第一层隐藏层的输出为
维向量
3. 第二层隐藏层
对于第二层隐藏层,以第一层隐藏层输出为输入,我们假设输出同样是
维向量,权重矩阵为
其中,为
维列向量。这样,第二层隐藏层的输出为
为向量
4. 输出层
输出层以第二层隐藏层的输出为输入,输出的是一个数,我们假设权重矩阵为
其中,为数字。这样,输出层的输出为数字
BP算法
BP算法是将误差从后向前传播,最后确定权重矩阵的更新策略。
1. 误差
给定一个数据,我们有误差
2. 链式法则
假设,则有链式法则
3. 反向传播
我们将依次从后往前确定权重矩阵的更新策略,也就是
- 先确定权重矩阵
的更新策略
- 再确定权重矩阵
的更新策略
- 最后确定权重矩阵
的更新策略
3.1
的更新
对关于
求导,我们有
这样,更新策略为
3.2
的更新
对关于
求导,我们有
其中,。
这样,更新策略为
3.3
的更新
对关于
求导,我们有
这样,更新策略为
其实,上面就是不断用链式法则计算导数的过程。