TensorFlow深度学习-第七章

第七章讲解的是关于反向传播法,主要的知识点包含:

  • 导数和梯度基础知识点
  • 神经网络中常用的几个激活函数的导数
  • 损失函数的梯度计算
  • 全连接的梯度计算
    • 单个神经元
    • 全连接层
  • 反向传播法

导数和梯度

导数

函数的输出值的增量和自变量的增量的比值在\triangle x趋于0的时极限为a,定义为:
a=\lim _{\Delta x \rightarrow 0} \frac{\Delta y}{\Delta x}=\lim _{\Delta x \rightarrow 0} \frac{f\left(x+x_{0}\right)-f(x)}{\Delta x}
导数表征了函数在某个方向上的变化率。

在网络中自变量是网络参数集\theta=\{w_1,b_1,…,w_n,b_n\},对于每个参数的偏导数为:
\nabla \mathcal{L}=\left(\frac{\partial \mathcal{L}}{\partial \theta_{1}}, \frac{\partial \mathcal{L}}{\partial \theta_{2}}, \frac{\partial \mathcal{L}}{\partial \theta_{3}}, \ldots \frac{\partial \mathcal{L}}{\partial \theta_{n}}\right)
梯度下降法沿着向量的形式更新梯度值
\theta^{\prime}=\theta-\eta * \nabla \mathcal{L}
如果希望求解函数的最大值,需要按着梯度方向更新:
\theta^{\prime}=\theta+\eta * \nabla \mathcal{L}
称之为梯度上升法

梯度

向量\left(\frac{\partial \mathcal{L}}{\partial \theta_{1}}, \frac{\partial \mathcal{L}}{\partial \theta_{2}}, \frac{\partial \mathcal{L}}{\partial \theta_{3}}, \ldots \frac{\partial \mathcal{L}}{\partial \theta_{n}}\right)叫做函数的梯度

  • 有所有的梯度组成
  • 表征方向
image

重要导数

(C)^`=0

(x^a)^`=ax^{a-1}

(a^x)^`=a^xln

(e^x)^`=e^x

(log_ax)^`=\frac{1}{xlna}

(lnx)^`=\frac{1}{x}

(sinx)^`=coxs

(cosx)^`=-sinx

(tanx)^`=\frac{1}{cos^2x}=sec^2x

(cotx)^`=-\frac{1}{sin^2x} = -csc^2x

(arcsinx)^`=\frac{1}{\sqrt{1-x^2}}

(arccosx)^`=-\frac{1}{\sqrt{1-x^2}}

(secx)^` = secx * tanx

(cscx)^`= -cscx * cotx

(arctanx)^`=\frac{1}{1+x^2}

(arccotx)^`=-\frac{1}{1+x^2}

(shx)^`=chx

(chx)^`=shx

导数形式

(f+g)^{\prime}=f^{\prime}+g^{\prime}

(fg)^`=f^`*g+f*g^`

(\frac{f}{g})^`=\frac{f^`g-fg^`}{g^2} ,g \neq 0

\frac{df(g(x))}{dx} = \frac{df(u)}{du}\frac{dg(x)}{dx}=f^`(u)*g^`(x)

激活函数导数

Sigmoid函数

Sigmoid函数容易出现梯度弥散现象,表达式为:
\sigma(x)=\frac{1}{1+e^{-x}}
求导过程:
\begin{aligned} \frac{d}{d x} \sigma(x)& =\frac{d}{d x}\left(\frac{1}{1+e^{-x}}\right) \\& =\frac{\mathrm{e}^{-x}}{\left(1+\mathrm{e}^{-x}\right)^{2}} \\& =\frac{\left(1+\mathrm{e}^{-x}\right)-1}{\left(1+\mathrm{e}^{-x}\right)^{2}} \\& =\frac{1+e^{-x}}{\left(1+e^{-x}\right)^{2}}-\left(\frac{1}{1+e^{-x}}\right)^{2} \\& =\sigma(x)-\sigma(x)^{2} \\& =\sigma(1-\sigma) \end{aligned}
这个非常重要\sigma^`(x)=\sigma(1-\sigma)

image
import numpy as np
def sigmoi(x):
  return 1 / (1 + np.exp(-x))  # 原函数形式

def derivative(x):
  return sigmoid(x) * (1 - sigmoid(x)) # 导数形式

ReLU函数

解决了梯度弥散现象,表达式为
ReLU(x) := max(0,x)

\frac{d}{d x} \operatorname{Re} L U=\left\{\begin{array}{ll}{1} & {x \geq 0} \\ {0} & {x<0}\end{array}\right.

image
def derivative(x):
  d = np.array(x, copy=True)
  d[x < 0] = 0
  d[x >= 0] = 1
  return d

LeakyReLU 函数

表达式为
\text {LeakyReLU}=\left\{\begin{array}{cc}{x} & {x \geq 0} \\ {p * x} & {x<0}\end{array}\right.
导数为
\frac{d}{d x} \text {LeakyReLU}=\left\{\begin{array}{ll}{1} & {x \geq 0} \\ {p} & {x<0}\end{array}\right.
p一般是较小的值

image
def derivative(x, p):
  dx = np.ones_like(x)
  dx[x < 0] = p
  return dx

Tanh 函数

表达式
\begin{align}tanh(x) & = \frac{e^x-e^{-x}}{e^x+e^{-x}}\\& = 2 * sigmoid(2x) - 1 \\\end{align}
导数为
tanh(x) = 1-tanh^2(x)

image

def sigmoid(x):
  return 1 / (1+np.exp(-x))

def tanh(x):
  return 2 * sigmoid(2*x) - 1

def derivative(x):
  return 1-tanh(x) ** 2

损失函数梯度

均方误差函数梯度

MSE表达式为
\mathcal{L}=\frac{1}{2} \sum_{k=1}^{K}\left(y_{k}-o_{k}\right)^{2}
偏导数为
\frac{\partial \mathcal{L}}{\partial o_{i}}=\frac{1}{2} \sum_{k=1}^{K} \frac{\partial}{\partial o_{i}}\left(y_{k}-o_{k}\right)^{2}
利用链式法则分解成
\frac{\partial \mathcal{L}}{\partial o_{i}}=\frac{1}{2} \sum_{k=1}^{K} 2 *\left(y_{k}-o_{k}\right) * \frac{\partial\left(y_{k}-o_{k}\right)}{\partial o_{i}}

\frac{\partial \mathcal{L}}{\partial o_{i}}=\sum_{k=1}^{K}\left(y_{k}-o_{k}\right) *-1 * \frac{\partial o_{k}}{\partial o_{i}}
当且仅当k=i时才是1,其他为0,上式可以表达成
\frac{\partial \mathcal{L}}{\partial o_{i}}=(o_i-y_i)

交叉熵函数梯度

在计算交叉熵损失函数时,一般将 Softmax 函数与交叉熵函数统一实现

Softmax函数梯度

表达式
p_i=\frac{e^{z_i}}{\sum^K_{k=1}e^{z_k}}

image

导数公式为
\frac{\partial p_{i}}{\partial z_{j}}=\left\{\begin{array}{ll}{p_{i}\left(1-p_{j}\right)} ;i=j \\ {-p_{i} \cdot p_{j}} ;i \neq j \end{array}\right.

交叉熵损失函数

表达式为
\mathcal{L}=-\sum_{k} y_{k} \log \left(p_{k}\right)
网络输出logits对变量z_i的导数为
\frac{\partial \mathcal{L}}{\partial z_{i}}=-\sum_{k} y_{k} \frac{\partial \log \left(p_{k}\right)}{\partial z_{i}}

=-\sum_{k} y_{k} \frac{\partial \log \left(p_{k}\right)}{\partial p_{k}} \times \frac{\partial p_{k}}{\partial z_{i}}

=-\sum_{k} y_{k} \frac{1}{p_{k}} \times \frac{\partial p_{k}}{\partial z_{i}}

其中\frac{\partial p_{k}}{\partial z_{i}}为Sotfmax函数的偏导数结果。分k=i,k\neq i讨论上面的式子,得到
\frac{\partial \mathcal{L}}{\partial z_{i}}=p_{i}\left(y_{i}+\sum_{k \neq i} y_{k}\right)-y_{i}

全连接层梯度

单个神经元梯度

采用的Sigmoid为激活函数
o^{1}=\sigma\left(w^{1} x+b^{1}\right)

image

上图解释

  • x是网络的输入,总共有J个节点
  • w是权值;
  • 其中输入第j个节点到输出𝑜^1的权值连接记为𝑤_{j1}^1。比如j1表示上一层的j号节点到当前层的1号节点
  • 通过权值和偏置变成了z
  • z通过激活函数变成了\sigma
  • 由于是单节点,o^1_1=o^1=\sigma(z_1)

损失函数为
\mathcal{L}=\frac{1}{2}\left(o_{0}^{1}-t\right)^{2}
求偏导数\frac {\partial \mathcal{L}}{\partial w_{j1}}
\frac{\partial \mathcal{L}}{\partial w_{j 1}}=\left(o_{1}-t\right) \frac{\partial o_{1}}{\partial w_{j 1}}
o_1=\sigma(z_1)分解,并且有\sigma^{\prime}=\sigma(1-\sigma)
\frac{\partial \mathcal{L}}{\partial w_{j 1}}=\left(o_{1}-t\right) \frac{\partial \sigma\left(z_{1}\right)}{\partial w_{j 1}}

=\left(o_{1}-t\right) \sigma\left(z_{1}\right)\left(1-\sigma\left(z_{1}\right)\right) \frac{\partial z_{1}^{1}}{\partial w_{j 1}}

其中\sigma(z_1)=o_1
\frac{\partial \mathcal{L}}{\partial w_{j 1}}=\left(o_{1}-t\right) o_{1}\left(1-o_{1}\right) \frac{\partial z_{1}^{1}}{\partial w_{j 1}}
其中\frac{\partial z_{1}^{1}}{\partial w_{j 1}}=x_{j}可得:
\frac{\partial \mathcal{L}}{\partial w_{j 1}}=\left(o_{1}-t\right) o_{1}\left(1-o_{1}\right) x_j
总结:

误差对权值w_{j1}的偏导数只和输出值o_1真实t以及当前权值连接的输入x_j有关系


全连接层梯度

​ 多输出的全连接层具有多个输出节点o^1_1,…,o^1_K,同时具有多个真实值标签t_1,…,t_K

MSE函数表示为

image

反向传播法

下图的相关介绍

  1. 输出层节点数为K,输出为o^K=[o^K_1,…,o^K_K]
  2. 倒数第二层的节点数为J,输出为o^J=[o^J_1,…,o^J_J]
  3. 倒数第三层的节点数为I,输出为o^I=[o^I_1,…,o^I_I]
image

推导过程:


image
image

每层的偏导公式为

  1. 倒数第一层

\begin{array}{c}{\frac{\partial \mathcal{L}}{\partial w_{j k}}=\delta_{k}^{K} o_{j}} \\ {\delta_{k}^{K}=o_{k}\left(1-o_{k}\right)\left(o_{k}-t_{k}\right)}\end{array}

  1. 倒数第二层

\begin{array}{c}{\frac{\partial \mathcal{L}}{\partial w_{i j}}=\delta_{j}^{J} o_{i}} \\ {\delta_{j}^{J}=o_{j}\left(1-o_{j}\right) \sum_{k} \delta_{k}^{K} w_{j k}}\end{array}

  1. 倒数第三层

\begin{array}{c}{\frac{\partial \mathcal{L}}{\partial w_{n i}}=\delta_{i}^{I} o_{n}} \\ {\delta_{i}^{I}=o_{i}\left(1-o_{i}\right) \sum_{j} \delta_{j}^{J} w_{i j}}\end{array}

其中o_n为倒数第三层的输入,即倒数第四层的输出。规律:迭代每层的节点\delta_{k}^{K},\quad \delta_{j}^{J}, \quad \delta_{i}^{I}, \quad \ldots可以求出当前层的偏导数,从而得到权值矩阵W的梯度。

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