ちびのはてな

「ちび(猫)」と「キノコ」から生まれた「ちびキノコ」。ドラゴンボール最強!純粋なサイヤ人のように生きたいと思っているモノ作りを楽しむ人です。IT技術で少しでも多くの人が笑顔になってくれたらいいなと。

【メモ】DistBelief

これは、G検定のための個人的なメモである。
内容はとても薄い。

DistBelief という用語が初めて登場したので調べたことをメモ。


高速化の手法

分散並列処理: DistBelief (2012, Google)

DistBelief 以前は、 MapReduce(2004, Google) が使われていて、深層学習には不向きだった。

DistBelief は、大規模ニューラルネットワークの研究。DistBelief を完了して TensorFlow となった。

ハードウェア

GPU が強くなった。
しかし「半導体の集積率は18か月で2倍になる」というムーアの法則にも限界が見えてきた

InfiniBand

強いネットワークケーブル?

バッチ正規化

勾配降下法のミニバッチ学習では、バッチごとにデータ分布の違いがある 内部共変量シフト(Internal Covariate Shift) が発生する。

内部共変量シフト

Deep Networkでは、深くなった隠れ層において各層と Activation ごとに入力分布が変わってしまうことが問題となる。この現象を 内部共変量シフトInternal Covariate Shift と呼ぶ。 白色化 の手法をとると、ニューラルネットワークの収束速度が速くなることが知られている。

まとめ

DistBelief を調べていたら、学習の高速化の話に繋がった。

【メモ】前処理

これは、G検定のための個人的なメモである。
内容はとても薄い。

正規化とか標準化とか平滑化とか、○○化がわからないからメモをする。 公式テキスト P.152 付近の話


前処理

手法 説明 メモ
正規化 各特徴量(入力データ)を 0〜1 の範囲に収まるように加工を施すこと -1〜1 に収まるようにする場合もある
標準化 各特徴量(入力データ)の平均を 0, 分散を 1 にするように加工を施すこと 各特徴量(入力データ)を標準正規分布に従うように加工を施すこと
無相関化 各特徴量(入力データ)間の相関を無くすこと 白色化の前処理
白色化 無相関化 + 標準化 標準化の強い版
正則化 不良設定問題を解いたり過学習を防いだりするために情報を追加する手法である パラメータのノルムの大きさに罰則をかけたりする
平滑化 データにおける重要パターンを、ノイズなど重要性の低いものを除去しながら見つけ出す方法 平滑化の目的は値の変化をなだらかにしてデータの傾向をわかりやすくすること

事前学習

いわゆる「事前学習済みのモデル」と「勾配消失問題に対する事前学習」の2種類の意味がある??

  • 事前学習済みモデル
    • ImageNet で学習させたモデルとか?
  • 勾配消失問題に対する事前学習
    • 重みの初期値を計算する処理
      • シグモイド関数においては Xavier の初期値が良いとされ、
      • ReLU 関数においては He の初期値が良いとされているあれ?

この2つは別物?一緒のもの??

【メモ】知識について

これは、G検定のための個人的なメモである。
内容はとても薄い。


データ基盤技術

ビッグデータに対応する技術のこと。 データ基盤技術 には大きく3つある。

  • 大量のデータを低コストでシェアするための 「オープンデータ技術」
    • セマンティック Web
    • Linked Open Data (LOD)
  • 大量データを実用時間内に処理するための 「データ処理基盤技術」
  • データに含まれる個人に関わる情報を保護しつつ、データを有効活用する 「データ保護技術」

オープンデータ技術

セマンティック Web

Web ページに対するメタ情報(RDF: Resource Description Framework)と意味情報(オントロジー)を導入するもの。
情報リソースに意味(セマンティック)を付与することで、人を介さずにコンピュータが自律的に処理できるようにするための技術。

  • セマンティック Web に必要なもの
    • メタ情報
      • XML」や「RDF」で定義することができる
    • オントロジー
      • RDF Schema」や「OWL*1」で定義することができる

オントロジー

概念化の明示的な仕様 のこと。共通の概念の体系のことを指す。
単に知識を集めるだけではなくて、それを活用することに重点を置かれた。 OWL = DAML*2:Web の機械可読表現を目的とした言語 + OIL*3

LOD*4

既存のデータに対して、RDF を活用して、コンピューターがデータの意味を判読して Web のようにオープンにアクセスできるようにしたもの。
Wikipedia を LOD 化した DBpedia なるものがある。2019/03 時点で 1239 データセットが公開されていて、LOD Cloud と呼ばれる。

RDF に対する問い合わせは SPARQL*5 で行われる

データ処理基盤技術

大量データを実際に扱うための技術である。
大量のデータやリアルタイムデータの処理を従来のように行っていたのでは実用時間内に完了しない。

よって、以下のような手法が利用される

  • 分散並列処理
  • 圧縮データ処理
  • ストリーム処理

分散並列処理

複数の箇所で処理を 独立並列 に行う。
例えば、カメラ画像の認識と判断を1台でまとめて行うと課題な処理時間が発生するため、複数のカメラ画像を取りまとめるノードで認識処理を行い、中央では認識結果を利用した判別だけを行うなどして、負荷を抑える

圧縮データ処理

圧縮されたデータのまま処理する方式一般のこと。
圧縮データをそのまま読み込むことができれば、伸張されたデータを扱う場合に比べて読み込み速度が短縮できる。
読み込みだけでなく、書き込みに対しても同じことが言える。

ストリーム処理

データを蓄積することなくリアルタイム時間で処理して、そのまま次の処理へ渡す方式のこと。
読み書きが入らないことで、処理時間を短縮することができる。
一方、リアルタイムに処理を行えるだけのマシンパワーが必要になるが、読み書きを行う外部記憶装置は不要になる。

データ保護技術

データ保護技術では、以下を両立させる必要がある

  • セキュリティ面
    • 個人の特定を不可能にする「プライバシー保護」
    • データの「漏洩対策」
    • など
  • ビッグデータに対する処理効率

プライバシー保護

一般的には、個人を特定できるような情報を秘匿する「データ匿名化」があるが、
希少疾患の病歴、高額所得といったデータと年齢、性別、地域などの情報(準識別子という)を組み合わせて個人を特定できてしまう可能性がある。

上記を防ぐ手法として k-匿名性 というものがある。
k-匿名性 は、データ中の準識別子の任意の組み合わせによる検索結果がk件以上になるという匿名性指標のこと。
データを公開するときに k-匿名性 を満たすように準識別子を加工することで匿名性が確保されるという考えである。

実際には l-多様性: 同じ準識別子の組み合わせデータのグループに対してl個以上のセンシティブ*6情報が入るt-近接性: 同じ準識別子の組み合わせデータのグループ内のセンシティブ情報の分布とデータ全体のセンシティブ情報の分布の差がt以下 といった指標が用いられる事が多い。

テキストからの知識獲得

知識のためのビッグデータとして、Web 上の情報が使われることが多い、内容に誤りも多く、量が豊富でも質が良いとは言えない。これに対して、誤りが少ないと考えられるのが「科学技術論文」である。
こうした大量の「科学技術論文」そのものをテキストマイニングを行うなどして知識を獲得している。

自然言語からの知識獲得に関しては、ニューラル自然言語処理が見い出されている。

知識グラフ

知識グラフとは、エンティティ間の関係を記述することで 知識のネットワーク を作る手法である。主語、述語、目的語といった3つの情報の組(トリプル)を使って記述する。
「皇居は、千代田区に、ある」「千代田区は、東京都に、ある」「東京都は、日本の首都、である」といった具合に記述することで、知識ネットワークを作成する。

最新技術動向

知識を使った推論(推論チャレンジ)

知識グラフは「獲得した知識をオントロジーを使って統合し、推論を適用することで新しい知識を導き出すものである」とも定義される。この「推論」に焦点を当てた技術開発も盛んで、例えば人工知能学会で開催される「ナレッジグラフ推論チャレンジ」では、推理小説の犯人を推論する。

知識グラフを作成する際の問題としては以下が挙げられ、知識グラフの補完、オントロジーマッチング技術、誤り検知・修正技術が研究されている

  • 知識の資源自身が不完全である問題
  • 新しい情報を追加する問題
  • 誤った知識の混入問題

*1:OWL: Web Ontology Language

*2:DAML: DARPA Agent Markup Language

*3:OIL: Ontology Interface Layer

*4:LOD: Linked Open Data

*5:SPRRQL: Protocol and RDF Query Language

*6:センシティブ: 「外部の刺激に反応しやすい」という意味合いを根本とし、「敏感」「鋭敏」「過敏」「繊細」などとも訳される。

【メモ】自然言語処理について

これは、G検定のための個人的なメモである。
内容はとても薄い。


機会翻訳の歴史

年代 技術 説明
1950年代〜1980年 ルールベース機械翻訳: RBMT*1 人間が作成したルールに従って翻訳する手法
1980年代〜1990年 用例に基づく機械翻訳: EBMT*2 翻訳の事例を大量に集めたコーパスを用いて翻訳する手法
1980年代〜 統計的機械翻訳: SMT*3 1980年代から研究開始。「対訳の例文から 翻訳モデル 」を「出力言語の例文から 言語モデル 」を機械学習を用いて作成する。文章が入力されたとき 翻訳モデル から推測される訳語、 言語モデル から得た訳語に対してスコア付けを行い、スコアが最大となる組み合わせを選ぶ。単語単位ではなくフレーズ単位で行うものを主に PBSMT*4という
- ニューラル機械翻訳: NMT*5 分散表現を利用して単語列から単語列を発生させる NN である「seq2seq」がベースとなっている
2016年〜 GNMT*6 Google 翻訳が SMT から GNMT になった

NMT は、以下により構成されている

  • 言語を数百次元の分散表現(ベクトル化)とする「エンコーダー
  • 分散表現に対して着目点を制御する「アテンション機構」
    • エンコードされた入力分とデコーダーの状態から次の単語を訳するときに注目すべき箇所を示すコンテキストベクトルを出力する
  • 分散表現とアテンション機構を元に出力文を復号化する「デコーダー」
    • RNN でコンテキストベクトルと1つ前に出力した単語の情報を受け取り、次の訳語を出力する

NMT の弱点?

入力文の最後に置かれた「文末記号」をでコーターが出力したときに翻訳が終了するため、翻訳終了が予測できず、翻訳過程も見えない。場合によっては翻訳の重複や抜けが発生する。

Transformer による自然言語処理の飛躍

2018年に提案された Open AI の GPT、ELMo、Google の BERT がある。
これらは RNN や CNN を使わずに「アテンション機構」のみの Transformer モデル(自己アテンション機構)を活用している

技術キーワード 説明
GPT*8 LTR 単方向の Transformer モデル
ELMo*9 LTR と RTL の連結モデル
BERT*10 双方向の Transformer モデル

自然な会話の実現

日付 技術キーワード 説明 メモ
2019/02 Live Transcribe の聴覚障碍者向けの書き起こし技術 Google
2018 Duplex RNN を基盤に電話会話データのコーパスを学習して TFX*11 を使ってハイパーパラメータの最適化を行った。自然な会話のために「DeepMind の音声生成モデルの WaveNet」や 「Google音声合成技術 Tacotron」と「波形接続型のテキスト読み上げエンジン」を用いて状況に応じたイントネーションの制御をしている Google I/O 2018

NLP の代表的なモデルまとめ

日付 技術キーワード 説明 メモ
2013/01 Word2Vec 単語をベクトルとして表現する手法。CBOW と Skip-gram というモデルがある Google
2013/01 Word2Vec: CBOW*12 周辺の単語からその間にある単語を推測する Google
2013/01 Word2Vec: Skip-gram CBOW とは逆に、ある単語からその周辺にある単語を推測する Google
2014/01 Doc2Vec Word2Vec の改良版で、文章をベクトルとして表現する手法。CBOW の改良版 PV-DM と Skip-gram の改良版 PV-DBOW が提案されている Google
2014/09 Attention 従来の Encoder-Decoder の弱点(Encode結果が固定長であるために長文を入力すると情報量が圧縮されすぎる)を解決するための機構
2014/09 GloVe*13 単語ベクトルを獲得する手法
2014/12 seq2seq 系列を系列に変換するモデル(RNN の入力が時系列だったら出力も時系列で扱いたいよね。って話でも出てきた) Google
2016/07 fastText Word2Vec より早い Facebook
2016/09 GNMT SMT から NMT に置き換えられた Google 翻訳で使われているモデル Google
2016/12 SCDV 文書ベクトルを獲得する手法 Microsoft
2017/06 Transformer RNN や CNN を用いない Attention 機構のみの自然言語処理の手法 Google
2018/02 ELMo 単語ベクトルを獲得する手法。Word2Vec と異なり文脈を考慮した単語ベクトルを獲得できる。bidirectional LSTM が使われている
2018/06 GPT ラベルなしのデータを学習させたモデルを転移学習させた Open AI
2018/10 BERT GPT と同じくラベルなしのデータを転移学習させることでタスクを解くが、多くのタスクにおいて SOTA を更新。モデルは bidirectional Transformer が使われている Google
2019/01 MT-DNN*14 BERT を参考にしたもの。Big BIRD とも呼ばれる? Microsoft
2019/02 GPT-2 GPT の後継版。あまりにも自然な文章生成を行えることで有名 Open AI
2019/04 ERNIE BERT の中国語版 Baidu
2019/06 XLNet BERT の上位互換。事前学習方法を改良したモデル Google
2019/07 RoBERTa Facebook?
2019/09 ALBERT BERT を軽量化・性能向上 Google
2019/10 T5*15 たぶん一番強い Google

*1:RBMT: Rule-Based Machine Translation

*2:EBMT: Example-Based Machine Translation

*3:SMT: Statistical Machine Translation

*4:PBSMT: Phrase-Based SMT

*5:NMT: Neural Machine Training

*6:GNMT: Google Neural Machine Translation

*7:forward/backward RNN

*8:GPT: Generative Pre-training Transformer

*9:ELMo: Embeddings from Language Models

*10:BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding

*11:TFX: TensorFlow Extended

*12:CBOW: Countinuous Bag-of-Words

*13:GloVe: Global Vectors for Word Representation

*14:MT-DNN: Multi-Task DNN

*15:T5: Text-To-Text Transfer Transformer

【メモ】重みの初期値を工夫するアプローチ

これは、G検定のための個人的なメモであり、公式テキストから引用しながら自分の言葉でまとめているものである。

重みの初期値を工夫するアプローチ

活性化関数、RMSpropやAdam、ドロップアウトやEarly Stopping、いずれも学習の「途中」で工夫するテクニックである。学習の「始め」に工夫するテクニックとしては「入力データ」を正規化したり標準化したりなどの方法がある。しかし、入力データは活性化関数を通ることで徐々に崩れていってしまう。そして登場するのが「重み」の初期値を工夫するというアプローチ。

勾配降下法 によって、最適な重みを探していくわけですが、この重みの初期値はランダムで決めている。
もともとこの初期値は「一様分布」や「正規分布」に従う乱数が用いられていたが、ディープニューラルネットワークを用いた手法では上手くいかないケースがよくあるらしい。そこで、これらの「乱数」に「ネットワークの大きさに合わせた適当な係数」を掛けることで、データの分布が崩れにくい「初期値」がいくつか考えられた。

活性化関数 最適とされる重みの初期値
シグモイド関数 Xavier の初期値
ReLU He の初期値

バッチ正規化

入力データは活性化関数を通ることで徐々に崩れていってしまう。そして登場するのが「重み」の初期値を工夫するというアプローチ。

と、前述しているが、活性化関数を通るたびに値が変わってしまうならば、 各層において活性化関数を掛ける前に伝播してきたデータを正規化する のはどうだろうか。と、考えられたのが「バッチ正規化」である。

関数の最小化問題・勾配降下法・最適化アルゴリズムメモ

これは、G検定のための個人的なメモであり、公式テキストから引用しながら自分の言葉でまとめているものである。

関数の最小化問題

ニューラルネットワークやディープニューラルネットワークの「学習」のゴールは、
「予測値」と「実際の値」の差を誤差(損失)として定義し、その誤差を最小化することを目指す。
極端に言えば、損失(誤差)をゼロにすることが目的。

つまり、「予測値」と「実際の値」の差は誤差関数として定義して、得られる誤差を最小化することを目的とするため 関数の最小化問題 という

勾配降下法

上記の 関数の最小化問題 を解く手法として 勾配降下法 がある。
勾配降下法 とは、ニューラルネットワークの重み更新アルゴリズムです。
また、ゴールをなるべく効率よく到達してくれるものが 最適化アルゴリズム である。

勾配降下法 とは、「最小化したい関数がある場合にその関数の勾配を求め、その勾配を元に関数の最小値を探索する手法」
関数の勾配(傾き)を求めるには 微分 。ここで微分が登場する。

学習率

勾配を降下していく際に「どれくらい降下するか」を 学習率 として設定する。

学習率 メリット デメリット
小さい 少しずつ降下するため各所を超えにくい 1回の計算で少ししか降下しないため収束までに時間がかかり、局所最適解に陥る可能性がある
大きい 局所最適解を超えて大域最適解に辿り着く可能性がある 大域最適解を通り越してしまう可能性がある(= オーバーシュート)

勾配降下法の種類

勾配降下法の種類 学習方法 重みの更新タイミング 計算量 備考
バッチ勾配降下法 (最急降下法) バッチ学習 訓練データ全ての誤差を計算して重みを1回更新する(イテレーションとエポックが等しい) 多い 訓練データの量が増加するにつれて計算を行うのが難しくなるため、その場合は ミニバッチ勾配降下法確率的勾配降下法 を利用します
確率的勾配降下法(SGD)*1 逐次学習 訓練データ1つに対して重みを1回更新する (データ1つ毎にイテレーションが増える) 小さい 重みを毎回更新するため、外れ値などの影響を受けやすくなるため毎回のパラメータの更新が安定しないという問題がある
ミニバッチ勾配降下法 ミニバッチ学習 訓練データ複数に対して重みを1回更新する 普通 SGD の欠点である 逐次学習 を補うために、少しだけバッチ学習をするようにしたもの

勾配降下法の欠点

  • 大域最適解 を求めたいが、 局所最適解 にたどり着いてしまうこと
  • 鞍点 にハマること

一般的に勾配降下法で求められる重みが 局所最適解 なのか 大域最適解 なのかは判断することができない。DNN の学習においては 大域最適解 を求められるに越したことはないが、 局所最適解 でもそれなりに誤差は小さくなるだろうからそれで妥協しよう。というスタンスである。

最適化アルゴリズム

さて、なるべく効率よくゴール(損失を最小化)に辿り着くためには、パラメータ(重み、バイアス)やら学習率やらを調整していくわけですが、 この最適なパラメータをなるべく効率的に獲得してくれるもが 最適化アルゴリズム というわけです。

最適化アルゴリズムの種類

最適化アルゴリズム 説明 備考
モーメンタム SGDは収束が遅く、振動や鞍点に陥る問題が発生しやすい。この問題を解決するために生まれたのがモーメンタム。 パラメータが作り出す空間局面をボールが転がって凹みの極値にたどり着くイメージする。局面に摩擦があると速度が減衰する分、余計な振れ幅がなく早く極値に達するようなモデルになる。SGD移動平均 を適用して振動を抑制
NAG(Nesterov accelerated gradient) モーメンタムの改良版。さらに収束への加速を増したものである モーメンタムで損失が落ちるように保証
AdaGrad 学習率を調整していこうという手法の先駆け。モーメンタムやSGDは振動抑制・収束加速には効果がある
RMSprop AdaGrad の改良版
AdaDelta RMSprop の改良版
Adam RMSprop の改良版 モーメンタム + RMSprop

全然わからない!

参考リンク: https://qiita.com/ZoneTsuyoshi/items/8ef6fa1e154d176e25b8

*1:Stochastic Gradient Descentの略

誤差関数メモ

これは、G検定のための個人的なメモであり、公式テキストから引用しながら自分の言葉でまとめているものである。

誤差関数とは

モデルの予測値と実際の値との誤差を計算するときに使う関数
出力層の活性化関数の種類に応じて使われる「損失関数(誤差関数ともいう)」にもある程度のパターンがある

誤差関数の種類

分類問題(2値) 分類問題 (多クラス) 回帰問題
出力層の活性化関数 シグモイド関数 ソフトマックス関数 (なし)/恒等関数
対応する損失関数 2値交差エントロピー誤差 他クラス交差エントロピー 平均二乗誤差

(活性化関数についてはこちら) chibi929.hatenablog.com