BP反向传播 and SGD随机梯度下降

什么是BP网络

BP神经网络,BP即Back Propagation的缩写,也就是反向传播的意思,顾名思义,将什么反向传播?文中将会解答。不仅如此,关于隐层的含义文中也会给出个人的理解。最后会用Java实现的BP分类器作为其应用以加深印象。
很多初学者刚接触神经网络的时候都会到网上找相关的介绍,看了很多数学原理之后还是云里雾里,然后会琢磨到底这个有什么用?怎么用?于是又到网上找别人写的代码,下下来之后看一眼发现代码写的很糟糕,根本就理不清,怎么看也看不懂,于是就放弃了。作为过来人,本人之前在网上也看过很多关于BP网络的介绍,也下载了别人实现的代码下来研究,原理都一样,但是至今为止没有看到过能令人满意的代码实现。于是就有了这篇文章,不仅有原理也有代码,对节点的高度抽象会让代码更有可读性。

BP网络的数学原理

下面将介绍BP网络的数学原理,相比起SVD的算法推导,这个简直就是小菜一碟,不就是梯度吗求个导就完事了。首先来看看BP网络长什么样,这就是它的样子:

image.png

为了简单起见,这里只介绍只有一个隐层的BP网络,多个隐层的也是一样的原理。这个网络的工作原理应该很清楚了,首先,一组输入x_1x_2、…、x_m来到输入层,然后通过与隐层的连接权重产生一组数据s_1s_2、…、s_n作为隐层的输入,然后通过隐层节点的θ(⋅)激活函数后变为θ(sj)其中s_j表示隐层的第j个节点产生的输出,这些输出将通过隐层与输出层的连接权重产生输出层的输入,这里输出层的处理过程和隐层是一样的,最后会在输出层产生输出\bar y_j,这里j是指输出层第j个节点的输出。这只是前向传播的过程,很简单吧?在这里,先解释一下隐层的含义,可以看到,隐层连接着输入和输出层,它到底是什么?它就是特征空间,隐层节点的个数就是特征空间的维数,或者说这组数据有多少个特征。而输入层到隐层的连接权重则将输入的原始数据投影到特征空间,比如s_j就表示这组数据在特征空间中第j个特征方向的投影大小,或者说这组数据有多少份量的j特征。而隐层到输出层的连接权重表示这些特征是如何影响输出结果的,比如某一特征对某个输出影响比较大,那么连接它们的权重就会比较大。关于隐层的含义就解释这么多,至于多个隐层的,可以理解为特征的特征
前面提到激活函数θ(⋅),一般可以使用S形函数(即sigmoid函数),比如可以使用log-sigmoid:\theta(s)=\frac{1}{1+e^{-s}}

image.png

或者tan-sigmoid:\theta(s)=\frac{e^s-e^{-s}}{e^s+e^{-s}}
image.png

前面说了,既然在输出层产生输出了,那总得看下输出结果对不对吧或者距离预期的结果有多大出入吧?现在就来分析一下什么东西在影响输出。显然,输入的数据是已知的,变量只有那些个连接权重了,那这些连接权重如何影响输出呢?现在假设输入层第i个节点到隐层第j个节点的连接权重发生了一个很小的变化Δw_{ij},那么这个Δw_{ij}将会对s_j产生影响,导致s_j也出现一个变化Δ{s_j},然后产生Δθ(s_j),然后传到各个输出层,最后在所有输出层都产生一个误差Δe。所以说,权重的调整将会使得输出结果产生变化,那么如何使这些输出结果往正确方向变化呢?这就是接下来的任务:如何调整权重。对于给定的训练样本,其正确的结果已经知道,那么由输入经过网络的输出和正确的结果比较将会有一个误差,如果能把这个误差将到最小,那么就是输出结果靠近了正确结果,就可以说网络可以对样本进行正确分类了。怎样使得误差最小呢?首先,把误差表达式写出来,为了使函数连续可导,这里最小化均方根差,定义损失函数如下:
L(e)=\frac{1}{2}SSE=\frac{1}{2}\Sigma_{j=0}^{k}e_{j}^{2}=\frac{1}{2}\Sigma_{j=0}^{k}(\bar{y}_j-y_j)^2
用什么方法最小化L?跟SVD算法一样,用随机梯度下降。也就是对每个训练样本都使权重往其负梯度方向变化。现在的任务就是求L对连接权重w的梯度。
w_{ij}^1表示输入层第i个节点到隐层第j个节点的连接权重,w_{ij}^2表示隐层第i个节点到输出层第j个节点的连接权重,s_j^1表示隐层第j个节点的输入,s_j^2表示输出层第j个几点的输入,区别在右上角标,1表示第一层连接权重,2表示第二层连接权重。那么有\frac{∂L}{∂w^1_{ij}}=\frac{∂L}{∂s^1_j}⋅\frac{∂s^1_j}{∂w^1_{ij}}

由于s^1_j=∑_{i=1}^{m}x_i\cdot w^1_{ij}

所以\frac{∂s^1_j}{∂w^1_{ij}}=x_i

代入前面式子可得\frac{∂L}{∂w^1_{ij}}=x_i⋅\frac{∂L}{∂s^1_j}

接下来只需求出\frac{∂L}{∂s^1_j}即可。
由于s^1_j对所有输出层都有影响,所以
\frac{∂L}{∂s^1_j}=∑_{i=1}^k\frac{∂L}{∂s^2_i}⋅\frac{∂s^2_i}{∂s^1_j}

由于
s^2_i=∑_{j=0}^nθ(s^1_j)⋅w^2_{ji}

所以
\frac{∂s^2_i}{∂s^1_j}=\frac{∂s^2_i}{∂θ(s^1_j)}\cdot\frac{∂θ(s^1_j)}{∂s^1_j}=w^2_{ji}⋅\theta'(s^1_j)

代入前面的式子可得
\frac{∂L}{∂s^1_j}=∑_{i=1}^k\frac{∂L}{∂s^2_i}⋅w^2_{ji}\theta'(s^1_j)=θ'(s1j)⋅∑_{i=1}^k\frac{∂L}{∂s^2_i}⋅w^2_{ji}

现在记
δ^l_i=\frac{∂L}{∂s^l_i}

则隐层$δ$
δ^1_j=\theta'(s^1_j)⋅∑_{i=1}^kδ^2_i⋅w^2_{ji}

输出层δ为
δ^2_i=\frac{∂L}{∂s^2_i}=\frac{∂∑^k_{j=0}\frac{1}{2}(\bar{y}_j−y_j)^2}{∂s^2_i}

=(\bar{y}_i−y_i)⋅\frac{∂\bar{y}_i}{∂s^2_i}=e_i⋅\frac{∂\bar{y}_i}{∂s^2_i}=e_i⋅\theta'(s^2_i)

到这一步,可以看到是什么反向传播了吧?没错,就是误差e!
反向传播过程是这样的:输出层每个节点都会得到一个误差e,把e作为输出层反向输入,这时候就像是输出层当输入层一样把误差往回传播,先得到输出层δ,然后将输出层δ根据连接权重往隐层传输,即前面的式子:
δ1j=θ′(s1j)⋅∑i=1kδ2i⋅w2ji

现在再来看第一层权重的梯度:
∂L∂w1ij=xi⋅δ1j

第二层权重梯度
∂L∂w2ij=∂L∂s2j⋅∂s2j∂w2ij=δ2j⋅θ(s1i)

可以看到一个规律:每个权重的梯度都等于与其相连的前一层节点的输出(即xi和θ(s1i))乘以与其相连的后一层的反向传播的输出(即δ1j和δ2j)。如果看不明白原理的话记住这句话即可!
这样反向传播得到所有的δ以后,就可以更新权重了。更直观的BP神经网络的工作过程总结如下:

image.png

上图中每一个节点的输出都和权重矩阵中同一列(行)的元素相乘,然后同一行(列)累加作为下一层对应节点的输入。
为了代码实现的可读性,对节点进行抽象如下:

 
image.png

这样的话,很多步骤都在节点内部进行了。
当θ(s)=11+e−s时,

θ′(s)=θ(s)⋅(1−θ(s))=SOut⋅(1−SOut)

当θ(s)=es−e−ses+e−s时,

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

推荐阅读更多精彩内容

  • 参见贪心算法——最短路径Dijkstra算法参见动态规划 目录 0.最短路径问题0.1 最短路径问题描述 0.1....
    王侦阅读 4,768评论 1 9
  • 引言 机器学习栏目记录我在学习Machine Learning过程的一些心得笔记,涵盖线性回归、逻辑回归、Soft...
    hfk阅读 4,344评论 4 18
  • 周二的清晨,我接到弗兰克老师群里最能坚持的战斗hzy的信息。他说给我介绍一个非常棒的群——儿科医生雨滴北美之行福利...
    路元阅读 1,201评论 0 1
  • 最近,看到好多朋友在简书里发表文章,感觉很好,为了给我文字找个栖息的地方,今天特地下载了简书,选定这个新家,...
    风逸云淡阅读 132评论 0 2
  • 教程 OpenGLES入门教程1-Tutorial01-GLKitOpenGLES入门教程2-Tutorial02...
    落影loyinglin阅读 10,626评论 33 34