机器学习笔记 - week5 -(九、神经网络的学习 Part1)


9.1 代价函数

在神经网络的学习中, 我们需要用到新的标记方法,假设神经网络的训练样本有m个,每个包含一组输入x和一组输出信号y
   L表示神经网络层数
   S_I表示每层的neuron个数(S_l表示输出层神经元个数)
   S_L代表最后一层中处理单元的个数。



神经网络的分类定义为两种情况:二类分类和多类分类:
   二类分类:S_L=0, y \in(0, 1),0和1对应表示二分类中的一类;
   K类分类:S_L=k, y_i = 1表示分到第i类;(k>2)


我们回顾逻辑回归问题中我们的代价函数为:
J \left(\theta \right) = - \frac{1}{m} \left[ \sum_\limits{i=1}^{m} {y}^{(i)} \log{h_\theta({x}^{(i)})} + \left(1-{y}^{(i)}\right)log\left(1-h_\theta\left({x}^{(i)}\right)\right)\right]+\frac{\lambda}{2m}\sum_\limits{j=1}^{n}{\theta_j}^{2}

在逻辑回归中,我们只有一个输出变量,又称标量(scalar),也只有一个因变量y,但是在神经网络中,我们可以有很多输出变量。
例如:上图的神经网络中, 我们的 h_\theta(x) \in ( \left [ \begin{matrix} 1 \\ 0 \\ 0 \\ 0 \end{matrix} \right ] , \left [ \begin{matrix} 0 \\ 1 \\ 0 \\ 0 \end{matrix} \right ] , \left [ \begin{matrix} 0 \\ 0 \\ 1 \\ 0 \end{matrix} \right ] , \left [ \begin{matrix} 0 \\ 0 \\ 0 \\ 1 \end{matrix} \right ] ) 是一个维度为K的向量,并且我们训练集中的因变量也是同样维度的一个向量,因此我们的代价函数会比逻辑回归更加复杂一些,为:
\newcommand{\subk}[1]{ #1_k }
h_\theta\left(x\right)\in \mathbb{R}^{K} {\left({h_\theta}\left(x\right)\right)}_{i}={i}^{th} \text{output}

J(\Theta) = -\frac{1}{m} \left[ \sum\limits_{i=1}^{m} \sum\limits_{k=1}^{k} {y_k}^{(i)} \log \subk{(h_\Theta(x^{(i)}))} + \left( 1 - y_k^{(i)} \right) \log \left( 1- \subk{\left( h_\Theta \left( x^{(i)} \right) \right)} \right) \right] + \frac{\lambda}{2m} \sum\limits_{l=1}^{L-1} \sum\limits_{i=1}^{s_l} \sum\limits_{j=1}^{s_{l+1}} \left( \Theta_{ji}^{(l)} \right)^2

看上去有点复杂,但其本质上还是说这个网络对于输入的一个向量给出的预测值与实际值之间的差距的一种衡量手段,如果能让代价函数最小也对应的能让这个网络算的最准。这个思想是贯穿在所有机器学习代价函数中的。

再回过头来看上图中的代价函数,前半部分的那两个\Sigma求和符号:
   第一层K它是神经网络输出层的K个单元(对应于K分类问题)
   第二层的m是指的训练集中有m组样本。
这个其实就和逻辑回归一样,只是神经网络比逻辑回归更有一般性。

前半部分的3个\Sigma求和符号,就是神经网络的正则化项而已,也就是对整个神经网络(所有层)中所有的参数\theta的一个求和处理(排除了每一层的偏移量)。


9.2 反向传播算法

上一小节讲了神经网络的代价函数,这一小节讲解一个让代价函数最小化的算法:反向传播算法。


算法目标: 找到合适的参数,让代价函数最小。那我们要怎么做呢?

  1. 已知代价函数:
    J(\Theta) = -\frac{1}{m} \left[ \sum\limits_{i=1}^{m} \sum\limits_{k=1}^{k} {y_k}^{(i)} \log \subk{(h_\Theta(x^{(i)}))} + \left( 1 - y_k^{(i)} \right) \log \left( 1- \subk{\left( h_\Theta \left( x^{(i)} \right) \right)} \right) \right] + \frac{\lambda}{2m} \sum\limits_{l=1}^{L-1} \sum\limits_{i=1}^{s_l} \sum\limits_{j=1}^{s_{l+1}} \left( \Theta_{ji}^{(l)} \right)^2

2.需要求 \mathop{min}\limits_{\Theta} J(\Theta)

我们需要有一种能够用编码实现的算法,梯度下降也好、其它更高级的算法也好,我们需要能够通过一种迭代的办法不停改变这些参数\theta的值,使得代价函数最小。而参数每次改变的大小,需要计算偏导数,通过偏导数的值来确定每一步参数改变的大小和正负。 也就是说,我们把代价函数的值作为了函数的因变量,把参数作为自变量来进行求函数最小值。


前向传播


从最左边的输入层一层一层的算到输出层,然后给出一组结果。
前向传播的含义,就是从输入层向前逐层向前运算最后得到输出。


反向传播

我们从神经网络的外面当然是只能看到输出层上,实际值和计算值之间的差值。但是,我们也知道最后输出上计算值和实际值之间的差值,是由前面从输入层到每个隐藏层慢慢地把这个误差给积累下来的。那我们该怎么算每一层上的误差呢?

\delta^{(l)}_{j} : 代表第l层的第j个单元的误差(真实值和神经网络的计算值之间的差)

  1. 先从输出层上开始,将输出层上的每个神经元的计算结果和这个分量上训练样本实际的结果之间求差值。输出层上的误差

\text{ For each output unit (layer L = 4) } \\ \delta^{(4)}_{j} = a^{(4)}_{j} - y_{j}

  1. 有了输出层的误差,倒数第二层的误差该怎么计算呢? 本质上,输出层的误差是由上一层的误差经过输出层上的运算之后得到的,那我们再经过一次逆反运算就可以算出来:\delta^{(3)} = ( \Theta^{(3)} )^{T} \delta^{(4)} * {g}'(z^{(3)})
  •          后面的一项, {g}'(z^{(3)}) 指的是激活函数的导数, {g}'(z^{(3)}) = a^{(3)} * (1 - a^{(3)})
  •          前面一项,\delta^{(3)} = ( \Theta^{(3)} )^{T} \delta^{(4)} 是权重导致的误差的和。
  1. 类似的,可以把第二层的也给算出来。这样,我们就有了每一层上的误差表达式, 便可以计算代价函数的偏导数了。
    假设λ=0,即我们不做任何正则化处理时有: \frac{\partial}{\partial\Theta_{ij}^{(l)}}J(\Theta)=a_{j}^{(l)} \delta_{i}^{l+1}
  •          l 代表目前所计算的是第几层。
  •          j 代表目前计算层中的激活单元的下标,也将是下一层的第j个输入变量的下标。
  •          i 代表下一层中误差单元的下标,是受到权重矩阵中第i行影响的下一层中的误差单元的下标。
  1. 如果我们考虑正则化处理,并且我们的训练集是一个特征矩阵而非向量。在上面的特殊情况中,我们需要计算每一层的误差单元来计算代价函数的偏导数。在更为一般的情况中,我们同样需要计算每一层的误差单元,但是我们需要为整个训练集计算误差单元,此时的误差单元也是一个矩阵,我们用\Delta^{(l)}_{ij}来表示这个误差矩阵。第 l 层的第 i 个激活单元受到第 j 个参数影响而导致的误差。
    我们的算法表示为:


    首先用正向传播方法计算出每一层的激活单元,利用训练集的结果与神经网络预测的结果求出最后一层的误差,然后利用该误差运用反向传播法计算出直至第二层的所有误差\Delta^{(l)}_{ij}

  2. 在求出了\Delta_{ij}^{(l)}之后,我们便可以计算代价函数的偏导数了,计算方法如下:
    {if}\; j \neq 0 : \ \ \ \ \ \ \ \ D_{ij}^{(l)} :=\frac{1}{m}\Delta_{ij}^{(l)}+\lambda\Theta_{ij}^{(l)}
    {if}\; j = 0 : \ \ \ \ \ \ \ \ D_{ij}^{(l)} :=\frac{1}{m}\Delta_{ij}^{(l)}

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

推荐阅读更多精彩内容