\documentclass[a4paper]{bxjsarticle}  
\usepackage{zxjatype}
\usepackage[ipa]{zxjafont}
\usepackage{listings}
\usepackage{amsmath} 
\usepackage{graphicx} 

\title{深層学習DAY3}

%\date{\today}

\begin{document}
\maketitle

\section{再帰型ニューラルネットワーク}
RNNとは時系列データに対応可能なニューラルネットワークである.時系列データとは時間的順序を追って一定間隔ごとに観察され,しかも相互に統計的依存関係が認められるようなデータの系列である.

\subsection{確認テスト}
RNNの3つの重みの残りの1つを答える.残りの1つは中間層から中間層の重みである.

\subsection{演習チャレンジ}
\begin{lstlisting}[language=python]
W.dot(np.concatenate([left, right]))
\end{lstlisting}

\section{BPTT}
パラメータ調整方法の一種である.RNNにおける誤差逆伝播である.

\subsection{確認テスト}
\[
y_1 = g(W_{out}+z_0*W+x_1*W_{in}+b) 
\]
バイアスはまとめてbとした.

\subsection{コード演習}
\begin{lstlisting}[language=python]
delta_t.dot(U)
\end{lstlisting}

\subsection{RNNの課題}
時系列を遡れば遡るほど勾配が消失していく (長い時系列の学習が困難)ためこれを解決するために構造自体を変えたLSTMが登場する.

\section{LSTM}
RNNの課題に対して学習と記憶を分離させる方法.
\subsection{勾配爆発}
勾配が層を逆伝播するごとに指数関数的に大きくなっていく.
\subsection{演習チャレンジ}
\begin{lstlisting}[language=python]
gradient * rate
\end{lstlisting}
\subsection{CEC (Consumer Electronics Control)}
それまでの入力値や中間層の出力値の情報をずっと記憶させる機能だけを持たせたのがCECである.入力データについて時間依存度に関係なく重みが一律であることが課題.
\subsection{入力・出力ゲート}
入力・出力ゲートの役割はゲートを追加することでそれぞれのゲートへの入力値の重みを重み行列W,Uで可変可能とする.
\subsection{忘却ゲート}
LSTMの現状はCECで過去の情報が全て保管されている.課題は過去の情報が要らなくなった場合,削除することはできず,保管され続けることである.解決策として過去の情報が要らなくなった場合,そのタイミングで情報を忘却する機能を持つことである.そこで誕生したのが忘却ゲートである.
\subsection{確認テスト}
忘却ゲート
\subsection{演習チャレンジ}
\begin{lstlisting}[language=python]
input_gate * a + forget_gate * c
\end{lstlisting}
\subsection{覗き穴結合}
ここまでの課題としてCECの保存されている過去の情報を任意のタイミングで他のノードに伝播させたり,あるいは任意のタイミングで忘却させたい.CEC自身の値はゲート制御に影響を与えていない.この課題の解決策としてCEC自身の値に重み行列を介して伝播可能にした構造である覗き穴結合を採用することである.
\section{GRU}
LSTMではパラメータ数が多く,計算負荷が高くなる問題があったが,それを解決するためにGRUがある.GRUは従来のLSTMでは,パラメータが多数存在していたため,計算
負荷が大きかった.しかしGRUではそのパラメータを大幅に削減し,精度は同等またはそれ以上が望める様になった構造である.
\subsection{確認テスト}
LSTMとCECが抱える課題は,パラーメータ量が多く複雑で計算量が増えた,重みが一律で学習機能がないことである.
\subsection{プログラムの実装}
配布コードに従い実行
\subsection{演習チャレンジ}
\begin{lstlisting}[language=python]
(1-z) * h + z * h_bar
\end{lstlisting}
\subsection{確認テスト}
LSTMとGRUの違いはGRUはCECを持たない.また,GRUはパラメータが少なく計算量が少ない.
\section{双方向RNN}
過去の情報だけでなく,未来の情報を加味することで精度を向上させるためのモデル
\subsection{演習チャレンジ}
\begin{lstlisting}[language=python]
np.concatenate([h_f, h_b[::-1]], axis=1)
\end{lstlisting}
\section{Seq2Seq}
Encoder-Decoderモデルの一種.機械対話や機械翻訳などに使用されている.
\subsection{Encoder RNN}
ユーザーがインプットしたテキストデータを単語等のトークンに区切って渡す構造.Takingは文章を単語等のトークン毎に分割しトークンごとのIDに分割する.EmbeddingはIDからそのトークンを表す分散表現ベクトルに変換.Encoder RNNはベクトルを順番にRNNに入力していく.
\subsection{Decoder RNN}
システムがアウトプットデータを単語等のトークンごとに生成する構造.
\subsection{確認テスト}
seq2seqはRNNを用いたEncoder-Decoderモデルの一種であり、機械翻訳などのモデルに使われる.
\subsection{演習チャレンジ}
\begin{lstlisting}[language=python]
E.dot(w)
\end{lstlisting}
\subsection{Seq2Seqの課題}
一問一答しかできない
\subsection{HRED}
HREDでは前の単語の流れに即して応答されるためより人間らしい文章が生成される.Encoder のまとめた各文章の系列をまとめてこれまでの会話コンテキスト全体を表すベクトルに変換する構造.短く情報量に乏しい答えをしがちである.そこで登場したのがVHRED.文脈を意識しながら生成するため,バリエーションが広がった.
\subsection{確認テスト}
seq2seqとHREDの違いはseq2seqは一問一答だがHREDは前の単語の流れに即した応答が可能.HREDとVHREDの違いはVHREDのほうが単一的な回答でなくバリエーションを持つ.
\subsection{オートエンコーダ}
教師なし学習の一つ.そのため学習時の入力データは訓練データのみで教師データは利用しない.MNISTの場合28x28の数字の画像を入れて同じ画像を出力するニューラルネットワークということ.メリットは次元削減が行えること.
\subsection{VAE}
通常のオートエンコーダーの場合何かしら潜在変数zにデータを押し込めているもののその構造がどのような状態かわからない.そこでVAEではこの潜在変数zに確率分布z∼N(0,1)を仮定したもの.
\subsection{one-hot ベクトル}
値が0か1しかない離散的なベクトル
\subsection{確認テスト}
確率分布z∼N(0,1)
\section{Word2vec}
RNNでは単語のような可変長の文字列をNNに与えることはできないことが課題であった.そこでWord2vecは単語をベクトルで表現する.
\section{World Embedding}
文章中の単語の意味や文法を反映するように単語をベクトルに変換する手法
\section{AttentionMechanism}
入力と出力のどの単語が関連しているのかの関連度を学習する仕組み.seq2seq の問題は長い文章への対応が難しい.そこで文章が長くなるほどそのシーケンスの内部表現の次元も大きくなっていく仕組みが必要.
\subsection{確認テスト}
RNNとword2vecの違いはRNNは時系列データを処理するのに適したネットワークでword2vecは単語の分散表現ベクトルを得る.seq2seqとAttentionの違いはseq2seqある時系列データから別の時系列データを得る.Attentionは時系列データの中身に関連性に応じて重みを付ける手法.

\section{実装}
\subsection{GRU}

\includegraphics[width=0.8\textwidth]{figs/gru.jpg}

\subsection{双方向RNN}

\includegraphics[width=0.8\textwidth]{figs/rnn.jpg}

\subsection{フレームワーク}
\subsubsection{双方向RNN}

\includegraphics[width=0.8\textwidth]{figs/rnn2.jpg}

\subsubsection{Seq2Seq}

\includegraphics[width=0.8\textwidth]{figs/seq2.jpg}

\subsubsection{dataaugumentation}

\includegraphics[width=0.8\textwidth]{figs/da.jpg}

\subsubsection{activatefunctions}

\includegraphics[width=0.8\textwidth]{figs/af.jpg}



\end{document}