神经网络参数的反向传播算法

神经网络损失函数

假设,用神经网络实现一个分类问题,有一个神经网络如下图所示:


L表示这个网络的层数,
S_l表示这个网络L层的单元。
这个分类问题如果是二元分类,输出层输出的结果是一个实数,可能
是0,也可能是1,输出层的单元数目是1,通常可以用K=1表示。
如果是多元分类,输出层的单元数目则为K,且假设函数的输出是一个K维向量,假设K=4,则输出结果可以用以下方式表示:

逻辑回归中,带有正则项的损失函数如下所示:

J(\theta)=-\frac{1}{m}[\sum_{i=1}^{m}y^{(i)}logh_{\theta}(x^{(i)})+(1-y^{(i)})log(1-h_\theta(x^{(i)}))]+\frac{\lambda}{2m}\sum_{j=1}^{n}\theta_j^{2}

神经网络的损失函数用如下公式表示:

J(\theta)=-\frac{1}{m}[\sum_{i=1}^{m}{\sum_{k=1}^{K}}y_k^{(i)}logh_{\theta}(x^{(i)})_k+(1-y_k^{(i)})log(1-h_\theta(x^{(i)}))_k]+\\ \ \frac{\lambda}{2m}\sum_{l=1}^{L-1}\sum_{i=1}^{s_l}\sum_{j=1}^{s_l+1}(\theta_{ji}^{(l)})^2

其中,h_\theta(x)K维向量,(h_\theta(x))_{i}表示第i个输出。

反向传播算法

  • 算法介绍:
    根据以上公式,我们已经得到了损失函数的计算公式,与逻辑回归算法一样,需要最小化损失函数,与逻辑回归算法最小化的方法一样,需要对J(\theta)求导,重点在于,对J(\theta)关于\theta_{ji}的偏导该如何计算?
    假设,我们只有一个训练样本(x,y),在上述的神经网络中,根据前向传播算法,计算方式如下所示:

    为了计算J(\theta)的导数,将会采用一种反向传播(BackPropagation)的算法,以上述神经网络为例,就是计算第四层每一个输出单元的输出值a^{(4)}与训练样本真实值y之间的差,如下所示:
    \delta^{(4)}= a_j^{(4)}-y_j^{(4)}

根据前向传播算法,可以有以下计算:
\delta^{(3)} = (\theta^{(3)})^T\delta^{(4)}.*g'(z^{(3)})

\delta^{(2)} = (\theta^{(2)})^T\delta^{(3)}.*g'(z^{(2)})

其中,g'(z) = a.*(1-a)
以上,我们介绍了一个训练样本的反向传播算法的计算过程,在一个大小为m训练集中,其计算过程如下所示:
初始化设置\delta_{(ji)}=0,
for \ \ i \ \ to \ \ \ m
\ \ \ \ set \ \ a^{(1)} = x^{(i)}

\ \ \使用前向传播算法计算a^{(l)}

\ \ \根据y^{(i)},计算\delta^{(L)} = a^{(L)}-y^{(i)}

\ \ \根据反向传播算法,计算\delta^{(l)}

\ \ \ \ \delta^{(l)}_{ij}:=\delta_{ij}^{(l)}+a_j^{(l)}\delta^{(l)}_{i}

最后,带有正则项的计算方式如下所示:
D_{ij}^{(l)} = \frac{1}{m}\delta_{ij}^{(l)}+a_j^{(l)}\delta^{(l)}_{i} \ \ \ if \ \ j\ne0

D_{ij}^{(l)} = \frac{1}{m}\delta_{ij}^{(l)} \ \ \ \ if \ \ j = 0

注意:利用反向传播算法计算\delta^{(l)}时,从\delta^{(L-1)}一直计算到\delta^{(2)}\delta^{(1)}不用计算,因为输入项x^{(i)}没有误差。

  • 深入理解反向传播算法
    神经网络的学习中,我们已经详细了解了神经网络的计算原理,即前向传播算法,如下公式所示:

a_1^{(2)} = g(\theta_{10}^{(1)}x_0+\theta_{11}^{(1)}x_1+\theta_{12}^{(1)}x_2+\theta_{13}^{(1)}x_3)

a_2^{(2)} = g(\theta_{20}^{(1)}x_0+\theta_{21}^{(1)}x_1+\theta_{22}^{(1)}x_2+\theta_{23}^{(1)}x_3)

a_3^{(2)} = g(\theta_{30}^{(1)}x_0+\theta_{31}^{(1)}x_1+\theta_{32}^{(1)}x_2+\theta_{33}^{(1)}x_3)

h_\theta(x) = a_1^{(3)} = g(\theta_{10}^{(2)}a_0^{(2)}+\theta_{(11)}^{(2)}a_1^{(2)}+\theta_{12}^{(2)}a_2^{(2)}+\theta_{13}^{(2)}a_3^{(2)})


有了以上前向传播算法的计算原理,反向传播算法的只是跟前向传播算法的计算方向不一样而已。
不带正则项的损失函数计算方法如下所示:
J(\theta)=-\frac{1}{m}[\sum_{i=1}^{m}y^{(i)}logh_{\theta}(x^{(i)})+(1-y^{(i)})log(1-h_\theta(x^{(i)}))]

与线性回归类似,可以近似认为损失函数的计算如下所示,看做某种方差函数。

J(\theta) = (h_\theta(x^{(i)})-y^{(i)})^2

神经网络中,\delta_j^{(l)} = \frac{\partial}{\partial z_j^{(l)}}J(\theta_j),根据其反向传播的特点,前一层的\delta^{(l)}由后一层的\delta^{(l+1)}乘以其路径上的\theta参数得到。

梯度检测

线性回归和逻辑回归中,使用梯度下降算法来实现最小化J(\theta)的值,在神经网络反向传播算法的实现过程中,也使用梯度下降算法得到最小的J(\theta)的值,但是与之前的算法相比,在反向传播的过程中会出现未知bug使得梯度下降算法得到的J(\theta)的值会出现误差,为了消除这种误差,采用梯度检测的方法,在梯度下降算法中,我们要得到J(\theta)的值,可以如下图所示,取得导数的近似值。


梯度的值,可以用以下公式表示:

\frac{\partial}{\partial \theta}J(\theta) = \frac{J(\theta+\epsilon)-J(\theta-\epsilon)}{2\epsilon}

其中,\epsilon是一个极小值,一般取\epsilon = 10^{-4}
以上,我们只考虑了\theta是实数的情况,神经网络的算法中,\theta是一个n个元素的向量(\theta \in R^n),其梯度计算方式可以如下表示:

通过以上数值估计的方法得到的J(\theta)关于\theta的偏导数,与反向传播算法得到的偏导数相比较,如果两者大小接近,则说明反向传播算法得到的梯度是正确的。

随机初始化

梯度下降算法中,需要对\theta参数初始化,在逻辑回归中,初始化的参数一般全部取0,但是在神经网络中,这一做法是无效的。\theta参数是神经网络中权重参数,当取为0时,会导致输入参数乘0的情况,导致神经网络相邻两层的\delta参数的不会发生变化。也会导致同一个神经单元的权重参数相一致。这样就会导致神经网络的高度冗余,最后导致神经网络的输出只有一个特征。

随机初始化的过程中,\theta取值通常如下所示,随机初始化取得的值一般在0到1之间。
\theta_{ij}^{(l)} \in [-\epsilon, \epsilon]

总结

以上,介绍了神经网络中的反向传播算法,结合之前的内容,训练一个神经网络的步骤如下所示:

  • 确定神经网络的架构:
    神经网络的组成由输入层,输出层和隐藏层构成,其架构选择基本遵循以下原则:

    • 输入层:神经网络的输入层有输入参数x的维数决定。
    • 输出层:由输出参数y确定,例如,在手写数字识别中,输出层的结构就能确定是10个类别。
    • 隐藏层:一个神经网络中,隐藏层的层数一般默认为1,如果有多个隐藏层,则应该保证每个隐藏层的神经单元数目相同。隐藏层的单元数目可以和输入层的单元数目相匹配,也可以比输入层的单元数目大几倍。
  • 神经网络的训练
    神经网络的训练大致可以有以下几个步骤确定,如下所示:

    • 随机初始化权重参数,一般取很小的值,接近于0。

    • 执行前向传播算法,即也就是对于任意输入x^{(i)},都有输出h_\theta(x^{(i)})

    • 计算损失函数J(\theta)

    • 利用反向传播算法计算出J(\theta)关于\theta的偏导数\frac{\partial}{\partial \theta_{ij}^{(l)}}J(\theta)

    • 使用梯度检测,即也就是比较数值方法得到导数值与反向传播算法得到的到数值是否接近。

    • 停止使用梯度检测,

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,992评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,212评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,535评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,197评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,310评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,383评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,409评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,191评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,621评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,910评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,084评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,763评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,403评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,083评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,318评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,946评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,967评论 2 351

推荐阅读更多精彩内容