前言

推荐系统中,我们通常用深度神经网络(DNN)来学习高阶(非线性)特征。这篇博客中,我们将详细介绍DNN的BP算法。

 

DNN

我们可以将DNN分成三个部分,

  • 输入层
  • 隐藏层
  • 输出层

接下来,我们以三层DNN为例。

1. 输入层

对于输入层,我们假设输入数据cnn隐藏层 dnn隐藏层数的选取_激活函数cnn隐藏层 dnn隐藏层数的选取_激活函数_02个特征,即
cnn隐藏层 dnn隐藏层数的选取_激活函数_03

2. 第一层隐藏层

第一层隐藏层的输出为cnn隐藏层 dnn隐藏层数的选取_激活函数_04维向量,这样,从输入层到第一层隐藏层,可以看做是从cnn隐藏层 dnn隐藏层数的选取_激活函数_02维到cnn隐藏层 dnn隐藏层数的选取_激活函数_04维的转化。我们需要

  • 权重矩阵cnn隐藏层 dnn隐藏层数的选取_DNN_07,将cnn隐藏层 dnn隐藏层数的选取_cnn隐藏层_08维列向量转化为隐藏层cnn隐藏层 dnn隐藏层数的选取_cnn隐藏层_09维列向量
  • 激活函数cnn隐藏层 dnn隐藏层数的选取_推荐系统_10,对cnn隐藏层 dnn隐藏层数的选取_cnn隐藏层_09维列向量的每一个元素做激活处理(常用的激活函数有sigmoid,Relu等)

我们将权重矩阵cnn隐藏层 dnn隐藏层数的选取_cnn隐藏层_12重写为
cnn隐藏层 dnn隐藏层数的选取_权重_13

其中,cnn隐藏层 dnn隐藏层数的选取_推荐系统_14cnn隐藏层 dnn隐藏层数的选取_激活函数_02维列向量。这样,第一层隐藏层的输出为cnn隐藏层 dnn隐藏层数的选取_激活函数_04维向量
cnn隐藏层 dnn隐藏层数的选取_推荐系统_17

3. 第二层隐藏层

对于第二层隐藏层,以第一层隐藏层输出cnn隐藏层 dnn隐藏层数的选取_cnn隐藏层_18为输入,我们假设输出同样是cnn隐藏层 dnn隐藏层数的选取_激活函数_04维向量,权重矩阵为cnn隐藏层 dnn隐藏层数的选取_推荐系统_20

其中,cnn隐藏层 dnn隐藏层数的选取_权重_21cnn隐藏层 dnn隐藏层数的选取_激活函数_04维列向量。这样,第二层隐藏层的输出为cnn隐藏层 dnn隐藏层数的选取_激活函数_04为向量
cnn隐藏层 dnn隐藏层数的选取_激活函数_24

4. 输出层

输出层以第二层隐藏层的输出cnn隐藏层 dnn隐藏层数的选取_DNN_25为输入,输出的是一个数,我们假设权重矩阵为cnn隐藏层 dnn隐藏层数的选取_权重_26

其中,cnn隐藏层 dnn隐藏层数的选取_推荐系统_27为数字。这样,输出层的输出为数字
cnn隐藏层 dnn隐藏层数的选取_DNN_28

BP算法

BP算法是将误差从后向前传播,最后确定权重矩阵的更新策略。

1. 误差

给定一个数据cnn隐藏层 dnn隐藏层数的选取_cnn隐藏层_29,我们有误差
cnn隐藏层 dnn隐藏层数的选取_权重_30

2. 链式法则

假设cnn隐藏层 dnn隐藏层数的选取_权重_31,则有链式法则cnn隐藏层 dnn隐藏层数的选取_推荐系统_32

3. 反向传播

我们将依次从后往前确定权重矩阵的更新策略,也就是

  • 先确定权重矩阵cnn隐藏层 dnn隐藏层数的选取_权重_33的更新策略
  • 再确定权重矩阵cnn隐藏层 dnn隐藏层数的选取_推荐系统_34的更新策略
  • 最后确定权重矩阵cnn隐藏层 dnn隐藏层数的选取_推荐系统_35的更新策略
3.1 cnn隐藏层 dnn隐藏层数的选取_推荐系统_36的更新

cnn隐藏层 dnn隐藏层数的选取_权重_37关于cnn隐藏层 dnn隐藏层数的选取_推荐系统_27求导,我们有
cnn隐藏层 dnn隐藏层数的选取_激活函数_39

这样,更新策略为
cnn隐藏层 dnn隐藏层数的选取_激活函数_40

3.2 cnn隐藏层 dnn隐藏层数的选取_权重_41的更新

cnn隐藏层 dnn隐藏层数的选取_权重_37关于cnn隐藏层 dnn隐藏层数的选取_DNN_43求导,我们有
cnn隐藏层 dnn隐藏层数的选取_权重_44

其中,cnn隐藏层 dnn隐藏层数的选取_激活函数_45

这样,更新策略为
cnn隐藏层 dnn隐藏层数的选取_cnn隐藏层_46

3.3 cnn隐藏层 dnn隐藏层数的选取_推荐系统_47的更新

cnn隐藏层 dnn隐藏层数的选取_权重_37关于cnn隐藏层 dnn隐藏层数的选取_DNN_43求导,我们有
cnn隐藏层 dnn隐藏层数的选取_权重_50

这样,更新策略为
cnn隐藏层 dnn隐藏层数的选取_DNN_51

其实,上面就是不断用链式法则计算导数的过程。