Commit 8884b1c0 by Lee

Update content

parent d53fb7d4
......@@ -1136,8 +1136,8 @@ NLP问题的隐含结构假设 & 无隐含结构假设,端到端学习 \\
\item 词嵌入的作用是把离散化的单词表示转换为连续空间上的分布式表示
\begin{itemize}
\item 把输入的词转换成唯一对应的词表大小的0-1向量
\item 根据0-1向量,从词嵌入矩阵中取出对应的词嵌入$e_y$
\item 取出的词嵌入$e_y$作为循环神经网络的输入
\item 根据0-1向量,从词嵌入矩阵中取出对应的词嵌入$e()$
\item 取出的词嵌入$e()$作为循环神经网络的输入
\end{itemize}
\end{itemize}
\vspace{-1em}
......@@ -1259,8 +1259,8 @@ NLP问题的隐含结构假设 & 无隐含结构假设,端到端学习 \\
\begin{itemize}
\item 输出层需要得到每个目标语单词的生成概率,进而选取概率最高的词作为输出。但RNN中的隐藏层并不会输出单词概率,而是输出$s$,其每一行对应一个单词表示
\begin{itemize}
\item 循环网络输出$s$经过权重矩阵$W$变换成词表大小的向量
\item 获得的向量经过Softmax变换得到不同词作为输出的概率,即单词$i$的概率$p_i = \textrm{Softmax}(i) = \frac{e^{s_i}}{\sum_{j} e^{s_{j}}} $
\item $s$经过权重矩阵$W$变成$\hat{s}$,其隐藏层维度变换成词表的大小
\item $\hat{s}$经过Softmax变换得到不同词作为输出的概率,即单词$i$的概率$p_i = \textrm{Softmax}(i) = \frac{e^{\hat{s}_i}}{\sum_{j} e^{\hat{s}_{j}}} $
\end{itemize}
\end{itemize}
%%% 图
......@@ -1587,7 +1587,7 @@ NLP问题的隐含结构假设 & 无隐含结构假设,端到端学习 \\
%%% GRU
\begin{frame}{另一种循环单元 - 门循环单元(GRU)}
\begin{itemize}
\item GRU
\item GRU是LSTM的一个变种,它把隐藏状态$h$和记忆$c$合并成一个隐藏状态$h$,同时使用了更少的``门''单元,大大提升了计算效率
\end{itemize}
%%% 图
\begin{center}
......@@ -1735,6 +1735,11 @@ NLP问题的隐含结构假设 & 无隐含结构假设,端到端学习 \\
\end{scope}
\end{tikzpicture}
\end{center}
{\scriptsize\begin{tabular}{l}
*$x_t$: 上一层的输出\\
*$h_t$: 同一层上一时刻的隐藏状态
\end{tabular}}
\end{frame}
%%%------------------------------------------------------------------------------------------------------------
......@@ -2658,6 +2663,50 @@ $\textrm{``you''} = \argmax_{y} \textrm{P}(y|\textbf{s}_1, \alert{\textbf{C}})$
%%%------------------------------------------------------------------------------------------------------------
%%% 训练
\begin{frame}{训练}
\begin{itemize}
\item 有了一个NMT模型,我们应该怎么使用梯度下降算法来训练一个``聪明''的翻译模型呢?
\begin{itemize}
\item 参数初始化
\only<2>{:模型结构是确定了,但是我们初始化参数还有很多需要注意的地方,否则训练不了一个优秀的模型
\begin{itemize}
\item LSTM遗忘门偏置初始为1,也就是始终选择遗忘记忆$c$,可以有效防止初始时$c$里包含的错误信号传播后面所有时刻
\item 其他参数一般使用Xavier参数初始化方法,可以有效稳定训练过程,特别是对于比较``深''的网络
\end{itemize}
}
\item 优化器选择
\only<3-5>{:训练RNN我们通常会使用Adam或者SGD两种优化器,它们各有优劣
\begin{center}
\footnotesize
\begin{tabular}{c|c|c}
& 使用 & 性能 \\
\hline
Adam & 一套配置包打天下 & 不算差,但没到极限 \\
SGD & 换一个任务就得调 & 效果杠杠的 \\
\end{tabular}
\end{center}
}
\item 学习率调度
\only<4>{
\begin{itemize}
\item 不同优化器需要的学习率不同,比如Adam一般使用$0.001$$0.0001$,而SGD则在$0.1\sim 1$之间挑选
\item 但是无论使用哪个优化器,为了达到最好效果,我们通常都需要根据当前的更新次数来调整学习率的大小
\end{itemize}
}
\only<5>{
\begin{itemize}
\item 学习率预热
\item 学习率衰减
\end{itemize}
}
\item 多设备并行
\only<6->{
\begin{itemize}
\item 万事俱备,只是为什么训练这么慢?\only<7->{\alert{- RNN需要等前面所有时刻都完成计算以后才能开始计算当前时刻的输出}}
\item 我有钱,是不是多买几台设备会更快?\only<7->{\alert{- 可以,但是需要技巧,而且也不是无限增长的}}
\end{itemize}
}
\end{itemize}
\end{itemize}
\end{frame}
%%%------------------------------------------------------------------------------------------------------------
......@@ -4896,7 +4945,7 @@ PE_{(pos,2i+1)} = cos(pos/10000^{2i/d_{model}})
\begin{itemize}
\item \textbf{优化器}:使用Adam优化器,$\beta_1$=0.9,$\beta_2$=0.98,$\epsilon=10^{-9}$ 关于学习率的设置,引入了warmup策略,在训练初期,学习率从一个较小的初始值逐渐增大,当到达一定的步数,学习率再逐渐减小
\begin{displaymath}
lrate=d_{model}^{-0.5}\cdot min(step^{-0.5},step\cdot warmup\_steps^{-1.5})
lrate=d_{\mathrm{model}}^{-0.5}\cdot \min(step^{-0.5},step\cdot \mathrm{warmup\_steps}^{-1.5})
\end{displaymath}
这样做可以减缓在训练初期的不稳定现象,保持分布平稳,通常warmup\_steps通常设置为4000
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论