Boostcamper's TIL (8)


2021/08/12


学習の内容


Python Basic


LSTM


シーケンスモデルでは,入力データ長がいつ終わるか分からないという困難がある.Inputデータの長さが長ければ長いほど,過去の情報量は大きくなる.
これらの問題に対する解決策としては、使用する過去の情報を限定できる方法がある.Markov modelRNN(Recurrent Neural Network)モデルは、現在の状態を計算する際に以前の状態を考慮し、過去の情報を用いたモデルとすることができる.Layerが長ければ長いほど,非常に多くの学習率と勾配演算が必要となり,消失,爆発などの問題を引き起こす.vanishing -> sigmoid exploding -> reluLSTM(Long Show Term Memory)モデルはForget,Input,Output Gate構造を設計し,RNNにおける問題を解決した.
コアアイデアは,layerを通過すると,外に出ないprevious cell stateが通過し,適切に過去の情報を失うことである.RNNと同様に、以前のhidden state情報を取得することによって、どの情報を忘れ、入力、出力するかを計算します.

0からtまで、一度も外に出ないPrevious cell stateがすべての層を通過し、コンベアのように過去の情報を燃やした.
  • Forget Gate:以前のHidden Stateと現在のデータを計算し、どのような情報が失われたかを決定します.
  • Input Gate:現在の入力を無条件にアップロードするのではなく、アップロードする情報を決定します.
  • Update Cell:破棄する情報をどの値に下げるかを決定します.
  • 出力Gate:更新されたcell stateを使用して出力を生成します.
  • Transformer


    一度にN個の単語を印刷できる.(Encoder)入力および出力シーケンスは、異なる数値であってもよいし、異なるドメインであってもよい.(ex.フランス語->英語)Transformerには3つの重要な概念がある.
  • エンコーダはN個の単語
  • を一度に処理する方法
  • DecoderとEncoder間の情報交換:
  • Decoderが
  • を生成する方法
    Self-Attention
    ある単語x 1に対して出力を計算するときx 2,x 3,...同じように考える.つまり、他の単語との関係を見て、どの単語に関連するかを学ぶということです.

    ある語について,別の語との関係を考える方法は,語ごとに1つのQuaries,Keys,Value(Q,K,V)ベクトルを生成することから始まる.「Thinking」という単語の注意を求めるときには、「Thinking」のQと自分を含めた他のすべての単語のKを内積してscoreを求める.次にscore normalizationをsqrt(keyのdimension)に分け、softmax演算を実行すると、どの単語が最も関係しているのか、自分で学ぶことができます.
    scores = torch.matmul(Q, K.transpose()) / np.sqrt(key_dimension) # normalize
    attention = F.softmax(scores) 
    z = attention.matmul(V) 
    attention RNN에서 발생하는 gradient vanishing, exploding의 단점을 어느정도 극복할 수 있다.

    Reference


    https://colah.github.io/posts/2015-08-Understanding-LSTMs/(LSTM運動原理)
    https://jalammar.github.io/illustrated-transformer/ (Transformer)

    の最後の部分