Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
M
mtbookv2
概览
Overview
Details
Activity
Cycle Analytics
版本库
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
问题
0
Issues
0
列表
Board
标记
里程碑
合并请求
0
Merge Requests
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
Snippets
成员
Collapse sidebar
Close sidebar
活动
图像
聊天
创建新问题
作业
提交
Issue Boards
Open sidebar
NiuTrans
mtbookv2
Commits
fbb892c1
Commit
fbb892c1
authored
Nov 24, 2020
by
孟霞
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
更新 chapter9.tex
parent
57bf0c89
显示空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
2 行增加
和
2 行删除
+2
-2
Chapter9/chapter9.tex
+2
-2
没有找到文件。
Chapter9/chapter9.tex
查看文件 @
fbb892c1
...
@@ -1189,7 +1189,7 @@ y&=&{\textrm{Sigmoid}}({\textrm{Tanh}}({\mathbi{x}}\cdot {\mathbi{W}}^{[1]}+{\ma
...
@@ -1189,7 +1189,7 @@ y&=&{\textrm{Sigmoid}}({\textrm{Tanh}}({\mathbi{x}}\cdot {\mathbi{W}}^{[1]}+{\ma
\subsubsection
{
1. 梯度下降
}
\subsubsection
{
1. 梯度下降
}
\parinterval
梯度下降法是一种常用的优化方法,非常适用于目标函数可微分的问题。它的基本思想是:给定函数上的第一个点,找到使函数值变化最大的方向,然后前进一“步”,这样模型就可以朝着更大(或更小)的函数值以最快的速度移动
\footnote
{
梯度下降的一种实现是
{
\scriptsize\bfnew
{
最速下降
}}
(Steepest Descent)。该方法的每一步移动都选取合适的步长,进而使目标函数能得到最大程度的增长(或下降)。
}
。具体来说,梯度下降通过迭代更新参数
$
{
\bm
\theta
}
$
,不断沿着梯度的反方向让参数
$
\bm
\theta
$
朝着损失函数更小的方向移动:如果
$
J
(
{
\bm
\theta
}
)
$
对
$
\bm
\theta
$
可微分,则
$
\frac
{
\partial
J
(
{
\bm
\theta
}
)
}{
\partial
{
\bm
\theta
}}
$
将指向
$
J
(
{
\bm
\theta
}
)
$
在
$
{
\bm
\theta
}
$
处变化最大的方向,这里将其称之为梯度方向。
${
\bm
\theta
}$
沿着梯度方向更新,新的
${
\bm
\theta
}$
可以使函数更接近极值,其过程如图
\ref
{
fig:9-43
}
所示。
\parinterval
梯度下降法是一种常用的优化方法,非常适用于目标函数可微分的问题。它的基本思想是:给定函数上的第一个点,找到使函数值变化最大的方向,然后前进一“步”,这样模型就可以朝着更大(或更小)的函数值以最快的速度移动
\footnote
{
梯度下降的一种实现是
{
\scriptsize\bfnew
{
最速下降
}}
(Steepest Descent)。该方法的每一步移动都选取合适的步长,进而使目标函数能得到最大程度的增长(或下降)。
}
。具体来说,梯度下降通过迭代更新参数
$
{
\bm
\theta
}
$
,不断沿着梯度的反方向让参数
$
\bm
\theta
$
朝着损失函数更小的方向移动:如果
$
J
(
{
\bm
\theta
}
)
$
对
$
\bm
\theta
$
可微分,则
$
\frac
{
\partial
J
(
{
\bm
\theta
}
)
}{
\partial
{
\bm
\theta
}}
$
将指向
$
J
(
{
\bm
\theta
}
)
$
在
$
{
\bm
\theta
}
$
处变化最大的方向,这里将其称之为梯度方向。
${
\bm
\theta
}$
沿着梯度方向更新,新的
${
\bm
\theta
}$
可以使函数更接近极值,其过程如图
\ref
{
fig:9-43
}
所示
\footnote
{
图中的
${
\bm
\theta
}^{
[
1
]
}$
和
${
\bm
\theta
}^{
[
2
]
}$
分别是参数
$
\bm
\theta
$
的不同变化方向
}
。
%----------------------------------------------
%----------------------------------------------
\begin{figure}
[htp]
\begin{figure}
[htp]
...
@@ -1568,7 +1568,7 @@ z_t&=&\gamma z_{t-1}+(1-\gamma) \frac{\partial J}{\partial {\theta}_t} \cdot \f
...
@@ -1568,7 +1568,7 @@ z_t&=&\gamma z_{t-1}+(1-\gamma) \frac{\partial J}{\partial {\theta}_t} \cdot \f
\item
{
\small\bfnew
{
层归一化
}}
\index
{
层归一化
}
(Layer Normalization)
\index
{
Layer Normalization
}
。类似的,层归一化更多是针对自然语言处理这种序列处理任务
\upcite
{
Ba2016LayerN
}
,它和批量归一化的原理是一样的,只是归一化操作是在序列上同一层网络的输出结果上进行的,也就是归一化操作沿着序列方向进行。这种方法可以很好的避免序列上不同位置神经网络输出结果的不可比性。同时由于归一化后所有的结果都转化到一个可比的范围,使得隐层状态可以在不同层之间进行自由组合。
\item
{
\small\bfnew
{
层归一化
}}
\index
{
层归一化
}
(Layer Normalization)
\index
{
Layer Normalization
}
。类似的,层归一化更多是针对自然语言处理这种序列处理任务
\upcite
{
Ba2016LayerN
}
,它和批量归一化的原理是一样的,只是归一化操作是在序列上同一层网络的输出结果上进行的,也就是归一化操作沿着序列方向进行。这种方法可以很好的避免序列上不同位置神经网络输出结果的不可比性。同时由于归一化后所有的结果都转化到一个可比的范围,使得隐层状态可以在不同层之间进行自由组合。
\item
{
\small\bfnew
{
残差网络
}}
\index
{
残差网络
}
(Residual Networks)
\index
{
Residual Networks
}
。最初,残差网络是为了解决神经网络持续加深时的模型退化问题
\upcite
{
DBLP:journals/corr/HeZRS15
}
,但是残差结构对解决梯度消失和梯度爆炸问题也有所帮助。有了残差结构,可以很轻松的构建几十甚至上百层的神经网络,而不用担心层数过深造成的梯度消失问题。残差网络的结构如图
\ref
{
fig:9-51
}
所示。图
\ref
{
fig:9-51
}
中右侧的曲线叫做
{
\small\bfnew
{
跳接
}}
\index
{
跳接
}
(S
hortcut Connection)
\index
{
Shortcut
Connection
}
,通过跳接在激活函数前,将上一层(或几层)之前的输出与本层计算的输出相加,将求和的结果输入到激活函数中作为本层的输出。假设残差结构的输入为
$
{
\mathbi
{
x
}}_
l
$
,输出为
$
{
\mathbi
{
x
}}_{
l
+
1
}
$
,则有
\item
{
\small\bfnew
{
残差网络
}}
\index
{
残差网络
}
(Residual Networks)
\index
{
Residual Networks
}
。最初,残差网络是为了解决神经网络持续加深时的模型退化问题
\upcite
{
DBLP:journals/corr/HeZRS15
}
,但是残差结构对解决梯度消失和梯度爆炸问题也有所帮助。有了残差结构,可以很轻松的构建几十甚至上百层的神经网络,而不用担心层数过深造成的梯度消失问题。残差网络的结构如图
\ref
{
fig:9-51
}
所示。图
\ref
{
fig:9-51
}
中右侧的曲线叫做
{
\small\bfnew
{
跳接
}}
\index
{
跳接
}
(S
kip Connection)
\index
{
Skip
Connection
}
,通过跳接在激活函数前,将上一层(或几层)之前的输出与本层计算的输出相加,将求和的结果输入到激活函数中作为本层的输出。假设残差结构的输入为
$
{
\mathbi
{
x
}}_
l
$
,输出为
$
{
\mathbi
{
x
}}_{
l
+
1
}
$
,则有
\begin{eqnarray}
\begin{eqnarray}
{
\mathbi
{
x
}}_{
l+1
}&
=
&
F(
{
\mathbi
{
x
}}_
l)+
{
\mathbi
{
x
}}_
l
{
\mathbi
{
x
}}_{
l+1
}&
=
&
F(
{
\mathbi
{
x
}}_
l)+
{
\mathbi
{
x
}}_
l
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论