Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
T
Toy-MT-Introduction
概览
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
单韦乔
Toy-MT-Introduction
Commits
521ddae4
Commit
521ddae4
authored
Oct 07, 2019
by
xiaotong
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
new pages
parent
2e92218f
显示空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
168 行增加
和
62 行删除
+168
-62
Section05-Neural-Networks-and-Language-Modeling/section05-test.tex
+42
-62
Section05-Neural-Networks-and-Language-Modeling/section05.tex
+126
-0
没有找到文件。
Section05-Neural-Networks-and-Language-Modeling/section05-test.tex
查看文件 @
521ddae4
...
...
@@ -116,75 +116,55 @@
\subsection
{
参数学习 - 反向传播
}
%%%------------------------------------------------------------------------------------------------------------
%%% 梯度下降
\begin{frame}
{
梯度下降
(Gradient Descent)
}
%%% 梯度下降
的变种
\begin{frame}
{
梯度下降
的不同实现方式
}
\begin{itemize}
\item
如果把目标函数看做是参数
$
\textbf
{
w
}$
的函数,记为
$
J
(
\textbf
{
w
}
)
$
。优化目标是:找到使
$
J
(
\textbf
{
w
}
)
$
达到最小的
$
\textbf
{
w
}$
\item
注意,
$
\textbf
{
w
}$
可能包含几亿个实数,不能是SMT中MERT之类的调参方法。这里可以考虑一种更加适合大量实数参数的优化方法,其核心思想是
\alert
{
梯度下降
}
:
\begin{itemize}
\item
<2-> 如果
$
J
(
\textbf
{
w
}
)
$
对于
$
\textbf
{
w
}$
可微分,
$
\frac
{
\partial
J
(
\textbf
{
w
}
)
}{
\partial
\textbf
{
w
}}$
表示
$
J
$
在
$
\textbf
{
w
}$
处变化最大的方向
\item
<2->
$
\textbf
{
w
}$
沿着梯度方向更新,新的
$
\textbf
{
w
}$
可以使函数更接近极值
\end{itemize}
\item
\textbf
{
梯度下降
}
:我们可以沿着梯度方向更新
$
\textbf
{
w
}$
一小步,之后得到更好的
$
\textbf
{
w
}$
,之后重新计算梯度,不断重复上述过程
\begin{displaymath}
\textbf
{
w
}_{
t+1
}
=
\textbf
{
w
}_
t -
\alpha
\cdot
\frac
{
\partial
J(
\textbf
{
w
}_
t)
}{
\partial
\textbf
{
w
}_
t
}
\end{displaymath}
其中
$
t
$
表示更新的步数,
$
\alpha
$
是一个参数,表示更新步幅的大小。
$
\alpha
$
的设置需要根据任务进行调整。而
$
J
(
\textbf
{
w
}_
t
)
$
的形式决定了具体的算法具体的实现。
\item
<2->
\textbf
{
批量梯度下降(Batch Gradient Descent)
}
:
\begin{displaymath}
J(
\textbf
{
w
}_
t) =
\frac
{
1
}{
n
}
\sum
_{
i=1
}^{
n
}
L(
\textbf
{
x
}_
i,
\hat
{
\textbf
{
y
}}_
i;
\textbf
{
w
}_
t)
\end{displaymath}
这种方法训练稳定,但是由于每次更新需要对所有训练样本进行遍历,效率低(比如
$
n
$
很大),大规模数据上很少使用
\end{itemize}
\pgfplotsset
{
%
colormap=
{
whitered
}{
color(-1cm)=(orange!75!red);color(1cm)=(white)
}
}
\end{frame}
%%%------------------------------------------------------------------------------------------------------------
%%% 梯度下降的变种
\begin{frame}
{
梯度下降的不同实现方式(续)
}
\begin{itemize}
\item
\textbf
{
随机梯度下降(Stochastic Gradient Descent)
}
:
\begin{displaymath}
J(
\textbf
{
w
}_
t) = L(
\textbf
{
x
}_
i,
\hat
{
\textbf
{
y
}}_
i;
\textbf
{
w
}_
t)
\end{displaymath}
大名鼎鼎的SGD,所有机器学习的课程里几乎都有介绍。每次随机选取一个样本进行梯度计算和参数更新,更新的计算代价低,而且适用于利用少量样本进行在线学习(online learning),不过方法收敛慢
\begin{center}
\begin{tikzpicture}
[
declare function =
{
mu1=1;
}
,
declare function =
{
mu2=2;
}
,
declare function =
{
sigma1=0.5;
}
,
declare function =
{
sigma2=1;
}
,
declare function =
{
normal(
\m
,
\s
)=1/(2*
\s*
sqrt(pi))*exp(-(x-
\m
)
^
2/(2*
\s
^
2));
}
,
declare function =
{
bivar(
\ma
,
\sa
,
\mb
,
\sb
)=1/(2*pi*
\sa*\sb
) * exp(-((x-
\ma
)
^
2/
\sa
^
2 + (y-
\mb
)
^
2/
\sb
^
2))/2;
}
]
\footnotesize
{
\visible
<2->
{
\begin{scope}
\begin{axis}
[
colormap name = whitered,
width = 8cm,
height = 5cm,
view =
{
20
}{
45
}
,
enlargelimits = false,
grid = major,
domain = -1:3,
y domain = 0:4,
samples = 30,
xlabel =
$
\textbf
{
w
}^{
[
1
]
}$
,
ylabel =
$
\textbf
{
w
}^{
[
2
]
}$
,
xlabel style =
{
xshift=0em,yshift=0.8em
}
,
ylabel style =
{
xshift=0.2em,yshift=0.8em
}
,
zlabel =
{$
f
(
\cdot
)
$}
,
ztick =
{
-0.1
}
,
colorbar,
colorbar style =
{
at =
{
(1.2,0.5)
}
,
anchor = north west,
ytick =
{
0,-0.1
}
,
height = 0.25*
\pgfkeysvalueof
{
/pgfplots/parent axis height
}
,
title =
{}
}
]
\addplot
3 [surf]
{
-bivar(mu1,sigma1,mu2,sigma2)
}
;
\node
[circle,fill=red,minimum size=3pt,inner sep=1.5pt] () at (axis cs:0.5,2,-0.01)
{}
;
\draw
[->,very thick,ublue] (axis cs:0.5,2,-0.01) -- (axis cs:0.8,1.6,-0.03) node [pos=1,right,inner sep=2pt]
{
\tiny
{
-
$
\frac
{
\partial
J
(
\textbf
{
w
}
)
}{
\partial
\textbf
{
w
}}$}}
;
\draw
[->,very thick,dotted] (axis cs:0.5,2,-0.01) -- (axis cs:0.2,1.5,-0.03);
\draw
[->,very thick,dotted] (axis cs:0.5,2,-0.01) -- (axis cs:0.5,3,-0.03);
%\draw [black!50] (axis cs:0,-1,0) -- (axis cs:0,4,0);
\end{axis}
\end{scope}
}
}
\end{tikzpicture}
\end{center}
\vspace
{
0.3em
}
\item
<2->
\textbf
{
小批量梯度下降(Mini-batch Gradient Descent)
}
:
\begin{displaymath}
J(
\textbf
{
w
}_
t) =
\frac
{
1
}{
m
}
\sum
_{
i=j
}^{
j+m
}
L(
\textbf
{
x
}_
i,
\hat
{
\textbf
{
y
}}_
i;
\textbf
{
w
}_
t)
\end{displaymath}
每次随机使用若干样本进行参数更新(数量不会特别大),算是一种折中方案,当今最常用的方法之一
\end{itemize}
\end{frame}
...
...
Section05-Neural-Networks-and-Language-Modeling/section05.tex
查看文件 @
521ddae4
...
...
@@ -2881,5 +2881,131 @@ $\textbf{w}^*$表示在训练集上使得损失的平均值达到最小的参数
\end{frame}
%%%------------------------------------------------------------------------------------------------------------
%%% 梯度下降
\begin{frame}
{
梯度下降(Gradient Descent)
}
\begin{itemize}
\item
如果把目标函数看做是参数
$
\textbf
{
w
}$
的函数,记为
$
J
(
\textbf
{
w
}
)
$
。优化目标是:找到使
$
J
(
\textbf
{
w
}
)
$
达到最小的
$
\textbf
{
w
}$
\item
注意,
$
\textbf
{
w
}$
可能包含几亿个实数,不能是SMT中MERT之类的调参方法。这里可以考虑一种更加适合大量实数参数的优化方法,其核心思想是
\alert
{
梯度下降
}
:
\begin{itemize}
\item
<2-> 如果
$
J
(
\textbf
{
w
}
)
$
对于
$
\textbf
{
w
}$
可微分,
$
\frac
{
\partial
J
(
\textbf
{
w
}
)
}{
\partial
\textbf
{
w
}}$
表示
$
J
$
在
$
\textbf
{
w
}$
处变化最大的方向
\item
<2->
$
\textbf
{
w
}$
沿着梯度方向更新,新的
$
\textbf
{
w
}$
可以使函数更接近极值
\end{itemize}
\end{itemize}
\pgfplotsset
{
%
colormap=
{
whitered
}{
color(-1cm)=(orange!75!red);color(1cm)=(white)
}
}
\begin{center}
\begin{tikzpicture}
[
declare function =
{
mu1=1;
}
,
declare function =
{
mu2=2;
}
,
declare function =
{
sigma1=0.5;
}
,
declare function =
{
sigma2=1;
}
,
declare function =
{
normal(
\m
,
\s
)=1/(2*
\s*
sqrt(pi))*exp(-(x-
\m
)
^
2/(2*
\s
^
2));
}
,
declare function =
{
bivar(
\ma
,
\sa
,
\mb
,
\sb
)=1/(2*pi*
\sa*\sb
) * exp(-((x-
\ma
)
^
2/
\sa
^
2 + (y-
\mb
)
^
2/
\sb
^
2))/2;
}
]
\footnotesize
{
\visible
<2->
{
\begin{scope}
\begin{axis}
[
colormap name = whitered,
width = 8cm,
height = 5cm,
view =
{
20
}{
45
}
,
enlargelimits = false,
grid = major,
domain = -1:3,
y domain = 0:4,
samples = 30,
xlabel =
$
\textbf
{
w
}^{
[
1
]
}$
,
ylabel =
$
\textbf
{
w
}^{
[
2
]
}$
,
xlabel style =
{
xshift=0em,yshift=0.8em
}
,
ylabel style =
{
xshift=0.2em,yshift=0.8em
}
,
zlabel =
{$
J
(
\textbf
{
w
}
)
$}
,
ztick =
{
-0.1
}
,
colorbar,
colorbar style =
{
at =
{
(1.2,0.5)
}
,
anchor = north west,
ytick =
{
0,-0.1
}
,
height = 0.25*
\pgfkeysvalueof
{
/pgfplots/parent axis height
}
,
title =
{}
}
]
\addplot
3 [surf]
{
-bivar(mu1,sigma1,mu2,sigma2)
}
;
\node
[circle,fill=red,minimum size=3pt,inner sep=1.5pt] () at (axis cs:0.5,2,-0.01)
{}
;
\draw
[->,very thick,ublue] (axis cs:0.5,2,-0.01) -- (axis cs:0.8,1.6,-0.03) node [pos=1,right,inner sep=2pt]
{
\tiny
{
-
$
\frac
{
\partial
J
(
\textbf
{
w
}
)
}{
\partial
\textbf
{
w
}}$}}
;
\draw
[->,very thick,dotted] (axis cs:0.5,2,-0.01) -- (axis cs:0.2,1.5,-0.03);
\draw
[->,very thick,dotted] (axis cs:0.5,2,-0.01) -- (axis cs:0.2,3.5,-0.03);
%\draw [black!50] (axis cs:0,-1,0) -- (axis cs:0,4,0);
\end{axis}
\end{scope}
}
}
\end{tikzpicture}
\end{center}
\end{frame}
%%%------------------------------------------------------------------------------------------------------------
%%% 梯度下降的变种
\begin{frame}
{
梯度下降的不同实现方式
}
\begin{itemize}
\item
\textbf
{
梯度下降
}
:我们可以沿着梯度方向更新
$
\textbf
{
w
}$
一小步,之后得到更好的
$
\textbf
{
w
}$
,之后重新计算梯度,不断重复上述过程
\begin{displaymath}
\textbf
{
w
}_{
t+1
}
=
\textbf
{
w
}_
t -
\alpha
\cdot
\frac
{
\partial
J(
\textbf
{
w
}_
t)
}{
\partial
\textbf
{
w
}_
t
}
\end{displaymath}
其中
$
t
$
表示更新的步数,
$
\alpha
$
是一个参数,表示更新步幅的大小。
$
\alpha
$
的设置需要根据任务进行调整。而
$
J
(
\textbf
{
w
}_
t
)
$
的形式决定了具体的算法具体的实现。
\item
<2->
\textbf
{
批量梯度下降(Batch Gradient Descent)
}
:
\begin{displaymath}
J(
\textbf
{
w
}_
t) =
\frac
{
1
}{
n
}
\sum
_{
i=1
}^{
n
}
L(
\textbf
{
x
}_
i,
\hat
{
\textbf
{
y
}}_
i;
\textbf
{
w
}_
t)
\end{displaymath}
这种方法训练稳定,但是由于每次更新需要对所有训练样本进行遍历,效率低(比如
$
n
$
很大),大规模数据上很少使用
\end{itemize}
\end{frame}
%%%------------------------------------------------------------------------------------------------------------
%%% 梯度下降的变种
\begin{frame}
{
梯度下降的不同实现方式(续)
}
\begin{itemize}
\item
\textbf
{
随机梯度下降(Stochastic Gradient Descent)
}
:
\begin{displaymath}
J(
\textbf
{
w
}_
t) = L(
\textbf
{
x
}_
i,
\hat
{
\textbf
{
y
}}_
i;
\textbf
{
w
}_
t)
\end{displaymath}
大名鼎鼎的SGD,所有机器学习的课程里几乎都有介绍。每次随机选取一个样本进行梯度计算和参数更新,更新的计算代价低,而且适用于利用少量样本进行在线学习(online learning),不过方法收敛慢
\vspace
{
0.3em
}
\item
<2->
\textbf
{
小批量梯度下降(Mini-batch Gradient Descent)
}
:
\begin{displaymath}
J(
\textbf
{
w
}_
t) =
\frac
{
1
}{
m
}
\sum
_{
i=j
}^{
j+m
}
L(
\textbf
{
x
}_
i,
\hat
{
\textbf
{
y
}}_
i;
\textbf
{
w
}_
t)
\end{displaymath}
每次随机使用若干样本进行参数更新(数量不会特别大),算是一种折中方案,当今最常用的方法之一
\end{itemize}
\end{frame}
\end{CJK}
\end{document}
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论