ディープラーニングを支える技術——「正解」を導くメカニズム[技術基礎]のメモ
第1章: ディープラーニングと人工知能 なぜディープラーニングが成功しているのか
-
機械学習: コンピュータがデータから「ルールや知識を獲得」(学習)するアプローチ
- ディープラーニング: 機械学習の中でもニューラルネットワークと呼ばれるモデルを使って表現学習も同時に行うアプローチ
-
モデル: 対象物や対象のシステムを情報として抽象的に表現したもの。
- 機械学習においては、対象の問題で獲得したい未知の分類器や予測機器を表したもの。
- パラメトリックモデル: パラメータで特徴づけられrたモデル
- 心理モデル: 人の心理状態を抽象化しシミュレーションし、何を感じているのか、どのような感情であるかを表す
- 世界モデル: 強化学習で登場する、「環境」を模したもの。エージェントが取る行動に対し環境がどのように遷移するかを表す。
- 人工知能: 人が備えているような知能をコンピュータで実現する試み。知能の定義はいくつかあるが、統一的な定義は存在しない。
-
ポランニーのパラドックス: 明示することのできない暗黙知が存在すること
- マイケル・ポランニー ハンガリー・科学者
- 我々は語れる以上のことを知っている
- 人は多くの情報処理を無意識下でおこなっていて、どれほど高度な処理をしているのかを自分すら気付けない
- シンボルグランディング(記号接地)問題: 記号列を現実世界の現象や概念に対応づける
-
セマンティックセグメンテーション:
- 構成要素の分解
- 構成要素の理解
- 欠損箇所の推定
- 空間の推定
-
人の機能獲得
- 経験を積むことで誰でも自然に機能を獲得することができる
- 言語運用能力
- 画像認識能力
- 抽象的な思考
- 連想記憶
- 物理モデル
- 心理モデル
-
人工知能の歴史
- 1956年: ダートマス会議: 各分野を代表する研究者が2ヶ月間集中して取り組めば、言葉を扱い、人のように抽象的に考え、人にしかまだ解けないタスクを解くことについて大きく前進できるだろう
- 目覚ましい成果は出なかった
-
参加者はのちに、人工知能の研究をリードしていく。
- ジョン・マッカーシー
- クロード・シャノン
- 1950年~1960年: シンボリック派とノンシンボリック派
- シンボリック派: 記号処理によって問題解決を図る
-
ノンシンボリック派: パターン処理によって問題解決を図る
- パターン認識による音声処理、画像処理
- ニューラルネットワークを使った研究
- シンボリック派とノンシンボリック派の融合: 抽象化された知識を取り組み、その表現上で処理することが重要になり、モデル上で操作する必要がある。
- 1957年: フランク・ローゼンプラットが人の学習、認識、記憶をモデル化したパーセプトロンと呼ばれるニューラルネットワークを提唱
- 1965年: ALPACが「有用な機械翻訳が実現できる見込みはない」と報告を出した
- 1969年: Marvin Minskyは、著書「Perceptrons」で、1層のニューラルネットワークは与えられた図形が連結であるかないかという問題が解けないことを示した
- 1975年~1985年: 世界的なAIブームが起きる。中心地は日本。
- 1982年: 通商産業省を中心に「第五世代コンピュータ」が開始。10年で総額500億超の予算がついた
-
第五世代コンピュータ: 大規模なデータベースと知識ベースをもとに推論し、人と計算機が自然言語を用いてコミュニケーションが取れるような人工知能を目指した。
- 論理型プログラミング言語PROLOGが使われた。
- 目的は並列推論できるようなプロセッサを作ること。プロセッサは完成し、目的は達成した。
- 期待はその先にある人工知能の実現に集まった。
- 研究開発の結果
- 有効なアプリケーションを見つけることができなかった
- 並列計算機も、PROLOGが並列処理に適していないこともあり、有用性を見出せなかった
- 商用ワークステーションやパーソナルコンピュータに性能面で負ける
-
世代
- 第一世代: 真空管
- 第二世代: トランジスタ
- 第三世代: チップ
- 第四世代: VLSI
- 第五世代: 並列プロセッサ
- AI冬の時代へ
- 1990年代: 多数の機械学習手法が登場
- 単純ベイズ法
- 最大エントロピー法
- ロジスティック回帰モデル
- アダブースト
- サポートベクトルマシン
- 条件付き確率場
- 2000年代: ビジネスへのインパクト
- Googleの検索システムや検索連動型広告
- Amazonのレコメンドシステム
- ディープラーニングの時代
- 誤差逆伝播法: 予測と正解の誤差を求め、誤差が小さくなるようにパラメータの更新方向を効率的に求める
- 勾配降下法: 誤差が十分に小さくなるまで何回も繰り返す
- 2006年: トロント大学のジェフリー・ヒントンがこれまでよりも層の多いニューラルネットワークを使った学習に成功したと報告。ディープラーニング(深層学習)と名づける
- 2012年: ILSVRCという一般画像認識のコンテストでディープラーニングを使った手法が圧勝。
- スタンフォード大学のフェイ・フェイ・リーは「まさか新手法ではなく、ずっと知っていたニューラルネットワークが達成するとは」と驚いたと話す
- ジェフリー・ヒントンの研究室の学生がインターン活動で広めるきっかけになる
- 2016年: AlphaGoが囲碁で、トップ棋士イ・セドルに勝利
- DeepMindが強化学習とディープラーニングを融合を進める
-
ディープラーニングの急速な発展
- 計算機の指数的な性能向上
- GPUの利用: ディープラーニングには、適度な複雑さをもつ並列計算が多く必要とされた
- データの爆発的な増加
- インターネットやデバイスの普及。
- デイバイス、通信コスト、ストレージコストの低下
- 人の学習と比べて大量のデータと計算リソースを必要とする理由
- 仮説: 人は学習結果を応用し、再利用している
- 仮説: 人も膨大な量のデータを使って学習している
- 仮説: 人の脳は、省エネかつ高い計算力を持つ
第2章: [入門]機械学習 コンピュータの「学習」とは何か
-
演繹的なアプローチ: 一般化されたルールや知識から個別の処理を生み出す
- 従来のプログラミングでは、人が持っている知識やノウハウをプログラムや設定値によって表現
-
機能的なアプローチ: 個別の事象から、普遍的なルールを見つけ出す
- 機械学習では訓練用データから学習システムが、学習済みモデルとしてプログラムに相当するものを自動的に作成する
-
モデル: 対象の問題で獲得したい分類器や予測器、生成器などを表し、入力から出力を計算する関数とみなすことができる
- パラメトリックモデル: ほぼすべてパラメータで特徴づけられたモデル
- 予測モデル: 予測を扱うモデル
- 分類モデル: カテゴリ値を予測するモデル
- 回帰モデル: 連続値を予測するモデル
- 生成モデル: 生成を扱うモデル
-
データ
- モデルを作るためにはデータは必須
- 質の良いデータを十分に揃える
- データが対象の問題のバリエーションをどの程度カバーしているかも重要
- i.i.d.: 観測するデータが同じデータ分布を持つと仮定します。
- 非i.i.d.: 実際の問題でi.i.d.が成り立たない場合
- 訓練データが一部の種類しかなく偏っている
- 訓練データとテストデータの分布間に違いがある
- 生存者バイアス: 何らかの選択を行ったデータだけを元に解析を行って判断すると、選択されなかったデータの情報を見逃してしまっているため誤った結論を導く
- 「データから学習する」とは、データからモデルの最適なパラメータを推定すること
- モデルの仮説数が多く、さまざまな仮説の中から選ぶことができる場合、モデルの表現力が高いという。
- 汎化能力: 有限の訓練データを用いて、無限とも言える「未知のデータ」に対してもうまく動くようなモデルを獲得することが最も重要な能力
-
過学習を防ぐ
- 訓練データを増やす
- データオーグメンテーション: 訓練データに意味を変えないような変換を加えて、人工的にデータを水増しする方法
- 仮説数を必要最低限に抑える
- オッカムのカミソリ: ある事柄を説明するためには、必要以上に多くを仮定するべきではない
-
ディープラーニングの汎化:
- 最適化の結果見つかる解がフラットな解であること
- 解が単純なモデルに対応していること
- 学習において勾配降下法を使うことで、対象の問題を解けるようなパラメータの中で最も単純なモデルを選ぶようになっていること
- 単に訓練データにフィッティングするだけでなく、その周辺でも関数値が滑らかであるためには従来考えられているよりもはるかに多くのパラメータ数を持つ必要があること
-
教師あり学習と強化学習の違い
- i.i.d.を仮定するか: 教師あり学習では各データは同じ分布から独立に生成されていると仮定する。強化学習では、時刻ごとに観測するデータの分布や、得られる報酬の分布は変化し、さらに自分がとる行動に依存してそれらの分布が変わるような問題を設定する。
- 受動的か、能動的か: 教師あり学習では訓練データは受動的に与えられるが、強化学習では能動的にデータを得ます。
- 報酬と探索のジレンマ: 今知っている情報を元に将来報酬を最大化するか、それとも情報を得るために新しい行動を試すかというジレンマ
- フィードバックは直接的か、間接的か: 教師あり学習はどのように行動を修正すれば良いかという直接的なフィードバックをもらえる。強化学習は報酬という間接的なフィードバックしかもらえない。
-
学習問題設定の3つの軸
- 訓練データが網羅的か、サンプリング的か
- 網羅的: 丸暗記、動的計画法
- 各問題が独立か、前後関係があるか(ワンショットか、逐次的か)
- 扱う問題が独立か、お互い依存しているか、
-
それぞれの問題が独立している場合をワンショット
- 複数の事例をまとめて学習(バッチ処理)することができる。
- 前の問題に依存して次の問題が決まる場合を逐次的
- フィードバックが教師的か、評価的か
- 教師的なフィードバック: 学習対象のシステムが予測したとき、最適な予測を教えてもらえる場合
- 評価的なフィードバック: とった行動が良かったか、悪かったかは教えてもらえるが、どの行動をとれば最適だったかを教えてもらえない場合
- バンデッド問題: 訓練データがサンプリングで、ワンショットな問題で、評価的なフィードバックが与えられるような問題
- 構造出力の教師あり学習: 訓練データがサンプリングで、逐次的な問題で、教師的なフィードバック
-
教師あり学習による画像分類の流れ
- 訓練データを用意する
- 多くの機械学習の問題では、入力をベクトルやテンソルなど構造化された数値データを扱います。
- 学習対象のモデルを用意する
- 要素とそれに対応する重み(ある入力に対応するパラメータ)
- スコア関数: 入力からスコアを求める関数
- 閾値関数: スコア関数の出力値を分類結果に変換する関数
- 損失関数を設計する
-
損失関数: 訓練データで与えられる正解に対し、予測がどれだけ間違っているかを表す関数
- 引数として、入力、正解の出力、モデルパラメータをとる。
- 0以上の値をとる
- 分類が正しければ0、間違えていれば0より大きな正の値をとるようにする
- 学習は、損失関数を使って表される「現在の予測の間違っている度合い」を小さくするようなパラメータを求める最適化問題を解くことで実現される。
-
マージンと更新
- 分類器が高い確信度で予測したにもかかわらず間違えた場合は、損失関数は大きな正の値を取るようにします。
- 確信度(マージン): 予測結果が境界面からどれだけ離れているかによって表される。
- 小さいほど確信度が低く。大きいほど確信度が高い。
- マージンが大きいにも関わらず予測が外れているということは、今の予測や境界面が大きく間違っていて大きく更新する必要があることを意味する。
-
使用する損失関数によってモデルの性質が変化する。
- 0/1損失: 閾値関数と同じで実際の分類結果を出力する。微分がほとんどの位置で0となり、勾配法を使った学習では使えない
- クロスエントロピー損失: 分類問題に使われる損失関数。訓練データの尤度を最大にする「最尤推定」とも呼ばれる。
- 確率分布間の距離を表すような尺度である「クロスエントロピー」を使った損失関数
- エントロピー: 確率分布Pからサンプルされた要素を符号化するときに最低限必要なビット数(平均符号長)として定義される
- クロスエントロピー: 確率分布Pからサンプルを確率分布Qのサンプルだと思って符号化した場合に最低限必要なビット数(平均符号長)として定義される
- シグモイド関数: 実数値の入力を受け取り、0から1の間の値を返すような単調増加関数
- 二乗損失(L2損失・二乗誤差): 回帰問題に使われる損失関数。大きな間違いをしないようにするが、訓練データに含まれるノイズに弱い。
- 絶対損失(L1損失): 回帰問題に使われる損失関数。大きな間違いをしてしまう可能性はあるが、ノイズに強い。
- 目的関数を導出する
- 訓練誤差: 訓練データ全体にわたっての損失関数の値の平均。訓練誤差を返す関数を最適化問題の目的関数と呼ぶ
- 目的関数の最適化対象変数は、訓練事例の入出力ではなく、モデルのパラメータθが対象となる。
- 目的関数の最小化問題を解くことで最適なパラメータを求める
- 最適化問題を解く(学習)
- 損失関数が二乗誤差のような場合は、最適解を解析的に求めることができる。
- 非線形モデルの場合では、最小になる解を解析的に求めることはできないため、パラメータを適当に初期化し、パラメータを目的関数が小さくなるように逐次的に更新していく方法が使われます。
-
勾配降下法: 逐次的にパラメータを更新していくアプローチの中で、「勾配情報」を使ってパラメータを逐次的に更新する方法
- 目的関数の変数は、モデルのパラメータ。
- 「次のパラメータθ」を「現在のパラメータθ」から「勾配」と「学習率α」を掛け合わせたものを引いて求める。
- 更新をあらかじめ決めた回数繰り返すか、他に決めた条件を満たすまで繰り返す。
- 訓練事例数が大きい場合、勾配を求める計算コストは大きくなってしまう。
- 勾配を求めるために毎回すべての訓練データについて操作する必要がある
-
確率的勾配降下法: 訓練データの一部から勾配の近似値を推定し、それを勾配の代わりに使ってパラメータを更新する
- ミニバッチ: 訓練データからサンプリングされた訓練データのこと
- 劇的な高速化を達成できる
- 更新時に適当なノイズが入ることで、汎化性能をあげる効果がある。
- フラットな解に到達しやすくなると考えられている。
-
汎化能力を与える方法
- 正則化: 学習時に訓練誤差の最小化に加えて汎化性能を上げるために行う操作。
-
正則化項を目的関数に加える
- L2ノルム正則化(L2正則化)
- L1ノルム正則化(L1正則化)
- 学習して得られたモデルを評価する
- 汎化誤差(期待損失): 未知のデータ上での誤差の期待値
- 訓練データとは別に評価データを用意し、学習中には使わなかった評価データに対する性能を測り、これを汎化誤差の近似とする
-
訓練誤差と汎化誤差の矜持による評価
- 訓練誤差と汎化誤差が共に大きい→未学習
- モデルの表現力が足りない
- 対象の問題が難しすぎる
- データのノイズが大きすぎる
- 入出力の間に関係がない
- 訓練誤差は小さく、汎化誤差が大きい→過学習
- 正則化を適用することで訓練誤差と汎化誤差のギャップを小さくする必要がある
- 入出力の間に関係がない→訓練データを丸暗記する現象が起きる可能性がある。
- 訓練誤差と汎化誤差が共に小さい→理想(学習成功)
- 評価データを使った汎化誤差の評価は近似であることに注意が必要。
-
三種類のデータ
- 訓練データ
- 評価データ
- 開発データ: ハイパーパラメータを調節するためのデータ
- テストデータ: 最終的に性能を評価するためのデータ。一定回数以下しか評価しないように工夫する必要がある。
-
注意点
- 学習時に評価データを使ってはいけない
- 評価データの結果を参考にしてモデルやパラメータをチューニングしてはいけない。
- リーク: 評価データが学習時に使われてしまっている状態
-
特徴抽出: タスクに関係する重要な情報を抽出してから、それをモデルに与える。
- 特徴抽出関数: 特徴抽出をする関数
- 入力を機械的に変換した値をそのまま与えても、うまく学習できない場合がほとんど
- 特徴抽出が最終的な性能を決める上で重要
- 生成モデルベースの分類: 同時確率を使ってモデル化し、「訓練データの対数尤度を最大化」するアプローチ
- 識別モデルベースの分類: 条件付き確率を使ってモデル化し、「条件付き確率の対数尤度を最大化」するアプローチ
-
線形: 下記の性質を持つ
- 入力をα倍すると出力もα倍になる。
- 入力を2つ足したものを入力とした結果は、それぞれの結果を足したものと一致する
- 関数が線形であるとき、入力が一次元の場合は直線、入力が二次元の場合は平面になります。
- 学習では目的関数の微分を計算し、その情報を利用してパラメータを更新する
-
学習の目標と分布: 下記の予測分布が経験分布と一致するようなること
- 予測分布: 予測・推定した結果得られる分布
- 経験分布: 正解のラベルに対応する確率だけが「1」、それ以外が「0」になっている確率分布
-
確率モデルとしての機械学習
- 尤度: その事象がどのくらい起きやすいかを表す。
- 確率P(x)上で事象uが観測される確率p(x=u)を事象uの尤度と呼ぶ。
- 最尤推定: 観測の尤度p(u;θ)が最大となるようなパラメータを推定結果として利用する
- 観測データを最も高い確率で生成するようなパラメータを推定結果として利用する。
- 対数尤度: 尤度の対数をとったもの。小さい数は負の値として表され、積は和となり、計算上で扱いやすく最適化しやすくなる。
- 一致性: 最尤推定で求められる確率分布は、i.i.d.が成り立つ問題であれば、観測が増えれば増えるほど真のパラメータに近づくことが知られている。
- 観測だけからパラメータを決定せず、確率分布について知っている知識を入れることで、より良いパラメータ推定をできる可能性があります。
- 事前分布: 観測データが得られる前から確率分布について知っていること、また信念を表す分布
- 事後分布: 観測データを見た後の確率分布
- 事後確率最大化(MAP推定): 事後確率が最大となるようなθを推定すること
- 尤度に事前確率を考慮した推定
- 負の対数尤度を損失関数、パラメータの事前確率から導出される正則化項を使った目的関数の最適化問題と一致する
- 学習問題を確率の枠組みでとらえる最大のメリットは、モデル自体の分布を扱えること
- 最尤推定やMAP推定は、一つのパラメータを推定する。このことを点推定と呼ぶ
-
ベイジアンニューラルネットワークによる推定: 予測値は、事後分布で重み付けした各モデルの予測の期待値として得られる。
- 点推定に比べて安定した推定ができる
- 予測の不確実性を扱える
- 計算量が多くなる
- Deep Ensembles: 異なる初期値から学習した複数のニューラルネットワークによるアンサンブルによる予測値を使ってベイジアンニューラルネットワークによる推定を近似する
-
ニューラルアーキテクチャ探索: ニューラルネットワークのアーキテクチャを自動探索する試み
- どの層を使うか
- スキップ接続を含め、層をどう接続するか
- それぞれの層のユニット数やカーネルサイズなど付随するパラメータをどう決めるか
第3章: ディープラーニングの技術基礎 データ変換の「層」を組み合わせて表現学習する
- 機械学習において重要な問題は、対象の情報をいかに表現するか
- もつれが解けているような表現: 情報はその後のタスクで扱いやすいように概念や因子が特定され、かつ分解されている必要がある。
-
BoW: 「局所的な情報」である「単語の出現情報」で文書を表す
- 単語種類数がmのとき、文書はm次元ベクトルとして表現される
- 異なる単語に1~mの整数IDを割り当てる
- 単語が出現している場合は1、していない場合は0となっているベクトルxで表現する。
- 単語頻度(tf): 単語が文書中に何回出現しているかを示す
- 文書頻度(df): 全文書中に何文書に単語が出現しているかを示す
- 問題点
- 出現順序や位置の情報が欠落している。
- 単語自体の意味をうまく扱うことができない。
-
BoVW: 画像を局所特徴量の集合としてベクトル表現した
- 画像の局所的な情報を用いて特徴量を決定した。
- 相対的な位置的な関係を無視し、単に出現しているかどうかでモデル化した。
- ディープラーニングは表現学習を実現しているから高性能である。
- ディープラーニング: 層の数が多く、幅が広い、ニューラルネットワークを利用した機械学習手法、またはそれらに関連する研究領域
-
ニューラルネットワーク: 脳の仕組みを模して作られた。
- 脳はニューロンと呼ばれる神経細胞と、シナプスと呼ばれるニューロン同士を繋げる接合部位から構成され、シナプスの強度を変えることで様々な情報処理を行う
- ニューロンとそれらをつなぐシナプスから成る重み(パラメータ)から構成される
- 単純な関数を大量に組み合わせることで複雑な関数を表現する
-
モデルの表現力: そのモデルがどのくらい多くの関数を表現できるか
- 線形識別機を何個重ねていってもモデルの表現力は変わらない
-
活性化関数:
- ReLU関数
- シグモイド関数
- ニューラルネットワークの表現力を大きく向上することができる
- 関数全体を非線形化する
- 万能近似定理(普遍性定理): ニューラルネットワークは非線形モデルであり、幅が十分に大きい場合、任意の関数を任意の精度で近似できる
-
層: 入力に対し線形変換を適用した後に非線形の活性化関数を適用した結果を一つの単位とする
- ニューラルネットワークのパラメータ: 各層のパラメータを全てまとめたもの
-
特異モデル: パラメータ表現と関数表現が一対一で対応しないようなモデル
- 非線形回帰モデル
- 隠れマルコフモデル
-
パラメータ共有: 異なる関数間でパラメータを共有すること
- パラメータを少なくすることで学習・推論の効率化ができる
- 学習を簡単にしたり
- 不変性・同変性といった事前知識を導入することができる。
-
ニューラルネットワークは、手続型プログラミング言語と違い、出力を望ましい値にするように、途中の関数の挙動をパラメータを調整することで修正することができる。
- この修正を学習と呼ぶ。
- ニューラルネットワークは、パラメータ調整を非常に効率的に実現できる。
-
最適化問題: 変数と目的関数が与えられたとき、目的関数の値を最小値(最大化)するような変数を求める問題
- 目的関数の例
- 教師あり学習: 訓練誤差
- 生成モデル: 対数尤度
- 強化学習: 報酬や収益、予測誤差
- 三つの最適化戦略
- 戦略1: パラメータを一つずつ修正→遅すぎる
- 戦略2: 全てのパラメータをランダムに修正→ほとんど改善されない
- 戦略3: 全てのパラメータを勾配を使って修正→速くて改善可能
-
誤差逆伝播法: 誤差情報が出力から入力に向かって逆に伝播するように計算していく
- 前向き計算の約3倍の計算コストで勾配を求めることができる。
- 動的計画法を使って微分を求める
- 動的計画法: 何かを計算する際、途中の計算結果を再利用することで全体の計算量を減らす戦略
- 逆向きに微分を掛け合わせていくことで実現する。
- 入力数が多く、出力数が少ないような関数で出力の各入力に対する偏微分を求めたい場合は、出力に近い方の微分が共通して登場Sルウ
- 大きなシステムにおける遠く離れた変数間の相互作用は、局所的な相互作用を掛け合わせていくことで求めることができる。
- この関係は、合成関数の微分として一般化することができる。
-
ディープラーニングフレームワーク: 学習や推論を行うために必要な機能がライブラリとしてまとめられ、学習や推論の善太の流れが実装されているもの
- 2002年: Torch, Lua
- 2007年: Theano: Pythonを使っている
- 2012年: Caffe: GPUをサポートした
- 2015年: Chainer,Tensorflow,MXNet
- 2016年: PyTorch
-
ニューラルネットワークの構成要素
- テンソル: 0個以上の添字で指定できる値の集合。
-
種類
- スカラー: 0階のテンソル
- ベクトル: 1階のテンソル
- 行列: 2階のテンソル
- 各層の入出力
- パラメータ
- 接続層: ニューラルネットワークの挙動を特徴づける最も重要な要素
- ニューロン間をどのようにつなぐか、異なるシナプス間でパラメータを共有するか
-
種類
- 総結合層: すべての入力ユニットと出力ユニット間がつながった層
- MLP(多層パーセプトロン): 総結合層と活性化関数を重ねて作られたニューラルネットワーク
- ほとんどの関数を表現できる高い表現力を持つ
- パラメータ数が多いため、実際に使われる場面は限定的。
- 分類モデルで各クラスのスコアを出力する最終層などで使われる。
- 畳み込み層:
- 画像認識や音声認識で利用される。
- 画像中にあるパターンが出現しているかどうかは「画像とパターン間の内積」が大きいかどうかで調べることができる
-
畳み込み操作: 入力画像xから、各パターンが出現しているのかを表す特徴マップを返す操作
- ニューラルネットワーク分野では、パターンを上下左右反転させると一致する。
- 数学的な定義は、相互相関関数と呼ばれる
- カーネル(あるいはフィルタ): パターンのこと
- カーネルサイズ: パターンサイズ
- ストライド: パターンをずらす量。
- ストライド数がsの時、入力サイズが(h,w)なら、出力サイズ(h/s, w/s)となる
- CNN: 畳み込み層を使ったニューラルネットワークのこと
-
総結合層との違い: 疎な結合, 重みの共有
- パラメータ数が劇的に少ない
- 可変サイズの画像や音声に使える
- FCN: 畳み込み層と入力サイズに依存しない操作(プーリング操作)のみ使って構成されたニューラルネットワーク
-
プーリング操作: 部分領域内の平均値を出力結果としたり、最大値を出力結果とするような操作
- Averaged Pooling: 平均値を出力する
- Mas Pooling: 最大値を出力する
- 特定の入力のみを使うような働きをする
- 移動不変性: 画像は写っているものが移動しても、空間的な意味が変わるだけで内容は変わらない性質を持つ
- 回帰結合層: ループを含む層
- 系列データの処理に使う
- FNN: 入力から出力に向かってデータが一方向に伝播していくようなネットワーク
-
RNN: ループを含むようなニューラルネットワーク。
- 内部状態を持ち、同じ入力を処理する場合でも内部状態が違うことで挙動が変わるようなネットワークになる
- オートマトンとみなすことができる
- 時間方向に展開すると、時間ステップ数だけの層からなるループのないネットワークとみなすことができる。
- BPTT: 誤差が時間方向を逆向きに進むように見える誤差逆伝播法
- 勾配消失: 勾配が消失し、途中の状態やパラメータを少し変えても最終結果にほとんど影響がないこと
- 勾配爆発: 発散が発散し。途中の状態やパラメータを少し変えると最終結果にとんでもない量の影響があること
- ゲート機構: 入力をそのまま流すか、それとも遮断するかを決める機構。ゲート関数で実現される。
- 勾配消失/勾配爆発の問題を防ぎつつ、複雑な計算を実現する。
- 半導体において、ゲート機構を使って論理回路を実現しているのと同様の考え方
-
種類
- LSTM
- 1990年代に提案された。
- 最も長く使われている手法
-
手順
- 内部状態から入力ゲート、忘却ゲート、出力ゲートを計算
- セル状態の更新量を求める。更新量は入力と内部状態から計算する
- 更新量は、Tanh関数を使って-1から1の間に収まるように正規化される
- 前のセル状態と更新量を元にセル状態を決定する。
-
セル状態 = 忘却ゲート * 前回のセル状態 + 入力ゲート * 更新量
- 忘却ゲート: どの程度忘れるのかを決める
- 入力ゲート: どの程度取り込むのかを決める
- セル状態を再度Tanh関数で正規化した上で出力ゲートにかけた上で内部状態を決定する
- スキップ接続の重要性が認識された
- GRU: LSTMを単純化させたゲート機構。
- 更新ゲート: 入力ゲートと出力ゲートを一つにしたもの
- LSTMよりパラメータが少ないため高速に動作し、計算量が大きい問題に使われる
- ConvGRU: 画像に対する処理で畳み込み操作と組み合わせて使われる。
- ゲート付き畳み込み操作
- 活性化関数
-
特徴
- 非線形関数であること
- 値のスケールを保つこと
- 微分可能であること
-
種類
- ReLU: スイッチのような活性化関数、入力が負なら0を正なら入力を返す。
- ReLUを使ったニューラルネットワークは任意の関数を任意の精度で近似できる
- ディープラーニングの「学習」における三大発明の一つ
- 2012年頃から本格的に利用されてきた
-
LReLU(Leaky ReLU): 入力値が負の場合でも値を0に遮断するのではなく、少しだけ値が漏れるようにした関数
- α: 負の領域の傾きを表すハイパーパラメータ。
- PReLU: αを誤差逆伝播法で求める方法
- シグモイド: ReLU登場前は、多くのニューラルネットワークで採用されていた。
- 現在では、ゲート関数や注意機構で利用される
- 微分値は常に1よりも小さく、最大値でも0.25しかない。そのため、繰り返し使うと勾配消失問題が発生する。
- Tanh(双曲線正接関数): xが大きい場合は1に漸近し、小さい時は-1に漸近するような関数
- Hard Tanh: Tanhを線分で繋ぎ合わせた関数で近似した関数。ハードウェア実装でもよく使われる
- Softmax: ベクトルを受け取り、同じ次元のベクトルを返すような関数
- 確率分布を出力する
- MaxOut: 任意の凸関数を学習して活性化関数として獲得する
- CReLU: 出力次元数が増えるような活性化関数。一つの入力を受け取ったら、その正側と負側の成分を出力する。
- 出力次元数は入力次元数の2倍となる
- Lifting Layer: CReLUを一般化したもの
- ELU,PELU,Swish
- フロベニウスノルム: 画像とパターンが完全に一致するとき0になり、違うほど大きな正の値になるような距離
第4章: ディープラーニングの発展 学習と予測を改善した正規化層/スキップ層/注意機構
-
2010年前半まで、ニューラルネットワークは「学習が難しい」と考えられていた。
- 学習している途中で学習が停滞する
- パラメータが発散する
- ニューラルネットワークの学習は非線形関数を使った非凸最適化であり、勾配降下法を使って最適化しても学習が成功する保証はない
-
さまざまな技術導入により学習が成功させることができるようになった
- ReLU: 非線形関数で、値のスケールを保ち、微分のスケールも保って「誤差がそのまま流れる」という優れた性質を持つ
- 誤差が消失や発散をせずに学習することができる。
- 正規化層: 正規化関数を適用する層
-
正規化関数: 活性値を正規化させるような関数
- 接続層の直後かつ活性化関数の直前に置かれる
-
重要性
- 非線形を生み出し、表現力を高く保つ
- ReLUのような区分線形関数を活性化関数として使っている場合、活性値の値が一部に偏ってしまうと、活性化関数の非線形性が失われる。
- 活性値を正規化することで、入力値が正と負にうまくばらついていれば、非線形を生み出すことができ、表現力を保つから
- 学習の高速化と安定化: 各次元の平均が0、または分散スケールが同じである方が、そうでない場合と比べて学習させやすい
- 汎化性能を改善する: 正規化層を使うことで活性値や勾配が安定し、勾配降下法の学習率を大きくしても発散せず学習できるようになる。
- フラットな解: その解だけでなくその周辺も目的関数の値が小さくなっている解です。
-
バッチ正規化(BatchNorm,BN): 最も広く使われる代表的な正規化層です。
- パラメータを更新するたびに、再度すべての訓練事例から各層の活性値の平均と分散を再計算する
- 非常に計算時間がかかってしまう。
- ミニバッチから平均と分散を推定し、それらを使って活性値を正規化する
- 推論時は、学習時に求めた統計量の指数移動平均を利用する
- バッチ正規化をニューラルネットワークの至る所に設置することで、分布が正規化する
- 大きな学習率を使っても安定して学習できるようになった部分の貢献が大きいことがわかっている
- バッチ正則化が汎化性能を改善する最も大きい理由は、最終層直前のノルムが大きくなるのを抑えているから
- パラメータ
-
β: 入力に近いうちはできるだけ情報を失わないようにして、出力に近づくに従って、結果を求めるのに必要な情報のみに絞り込んでいく
- 負の値が設定されることで、一部の重要な情報のみを選別する識別的な特徴ベクトル
- γ: 出力のスケールを決める役割
- 注意点
- 活性値の大きさ、スケール情報を消してしまう。
- バッチ中の他のデータへの依存性がある
- チャンネルごとの正規化
-
正規化手法(活性値を正規化する手法)
- バッチ正規化
- 層正規化: 層の活性値全体を使って正規化
- サンプルごとの統計量が大きく異なる場合に有効な手法
- サンプル正規化: H,Wの軸に沿って統計量を計算し、サンプルかつチャンネルごとに正規化
- 統計量を求める範囲が小さくなっているので統計量の推定精度が低くなり、正規化の際のノイズが大きくなる
- グループ正規化: チャンネルをグループに分割し、G,H,Wの軸に沿って統計量を計算し、N * (C / G)個の統計量を求め、サンプル、グループごとに正規化する
- サンプル正規化の改良版
-
正規化手法(重みを正規化する手法)
- 重み正規化
- 重み標準化: 重みの平均が0、分散が1となるように正規化する
- 目的関数の傾きを抑える効果
- 活性値の正規化と組み合わせて使用することができる。特にグループ正規化と使うとバッチ正規化と同等の精度を達成できることが報告された
-
白色化: 次元間の相関を取り除くような変換
- 勾配降下法による収束が速くできることが知られている。
- スキップ接続: 入力が変換をスキップしてそのまま出力に接続している構造
- 学習の安定性や効率性、表現力で劇的な効果を生み出す
- ResNet: Residual(残差) Network、
- 勾配消失問題を解決し、逐次的な推論を実現する。
-
勾配消失問題: 誤差逆伝播時に誤差が途中で消失してしまう問題
- 誤差は各層を伝播する際に、活性化関数の微分と重み行列の転置行列を掛けていきます。
- 層数が大きい場合、掛け算が何回も発生する。
- 最初は大きかった誤差が、下の層では誤差が消失する、もしくは近い位置でも誤差の方向がバラバラの方向を向く状態になってしまう。
- 下の層のパラメータを少し変えたとしても上の出力は全く変わらないようなネットワークとなってしまう状態
- 勾配の変化が滑らかではないために起こる
- スキップ接続が導入される前までは、学習可能なニューラルネットワークは10層程度までが限度
- 誤差逆伝播時に上層の誤差を下層に崩さずにそのまま伝える役割を果たしている。
- 今の入力を目標に向けて少しずつ修正していくことができる。
- 現在の状態を損失が小さくなるように勾配降下法で逐次的に更新しているとみなすことができる。
- ボトルネック(情報ボトルネック): 変換する際に、一度チャンネル数や空間方向に関してデータを小さくしてから計算コストのかかる変換をおこなった後、再度元の入力と同じサイズに戻すテクニック
-
変種
- PreActivation: 活性化関数ReLUをブロックの中に入れ、スキップ接続では非線形変換を適用しないようにする。
- Single ReLU: PreActivationのブロック内で、最初のReLUを除いた方式。ブロック内でReLUを一つしか使わないことに由来する。
- 注意機構: 入力に応じて、データの流れ方を動的に変える。
-
表現力を改善できる: データに応じて関数の形を変えることで表現力が向上する。
- データの流れ方やパラメータの重み付け、関数がその形を適応する
- 入力データによって接続層の重みを生成する関数を学習しているとみなすことができる。
-
学習を改善できる: 学習の影響範囲を限定する。
- 実際にタスクに使われたパラメータのみに絞り込んで更新することができ、他のタスクの学習結果が保たれるようになる
- 破滅的忘却: 新しいことを学習した結果、前の学習結果を忘れてしまう現象
- 汎化性能を改善できる: 情報のボトルネックをわざと作る
-
注意機構は時間スケールの異なる記憶の仕組みの一つとみなすことができる。
- ニューラルネットワークの記憶の方法
- 活性値/内部状態: テンソルデータとして表現。すぐにアクセス、小容量
-
重み/パラメータ: 過去の活動を記憶している
- Fast Weight: 一時的に重みを変える仕組み
-
過去の内部状態を「注意機構」で読み出す
- 現在の入力、状態に応じて、過去の内部状態から直接情報を呼び出すことができる。
- 内部状態よりは長期、内部パラメータよりは短期の記憶を担当している。
-
クエリとキー
- クエリ: 入力によって、どのデータを読み取るかが変わってくる
- 読み取る対象数が変わっても処理できる
- クエリとキーの近さによってどの情報を優先的に読み込むか、または読み込まないかを制御できる
- クエリとキーは、高次元空間中の一種のルックアップテーブルを表している。
- 注意機構全体の操作は微分可能な操作: 誤差逆伝播法を使って、クエリ、キー、値、左記を生成するパラメータを更新することができる。
- 注意機構の優れた点は、遠く離れた情報も1ステップで集めることができること。
-
種類
- ソフト注意機構: すべての注意対象に非ゼロの重みを与える
- ハード注意機構: 一部の注意対象に非ゼロの重みを与える
- 自己注意機構: 注意対象として過去の自分の計算結果を対象にする注意機構
- 相互注意機構: 他のネットワークの出力結果を対象にする注意機構
第5章: ディープラーニングを活用したアプリケーション 大きな進化を遂げた画像認識、音声認識、自然言語処理
-
画像認識: 画像を入力とした時
- 画像分類: 画像に写っているのは何かを解くタスク
- NCHW: 画像は、画像の添字/チャンネル/画像の高さ/画像の幅で表現する。
- 元の入力画像に畳み込み層やプーリング層を適用して徐々に解像度を減らしながらチャンネル数を増やし、空間方向が小さく、チャンネル数が大きいようなテンソルデータへ変えていく
- 最終的に空間方向W,Hのサイズが1*1、チャンネル数が数百~数千のようなデータへ変換する。
- 最終的なデータは、空間方向に広がりを持っていないため、ベクトルとみなすことができる。
- ベクトルを総結合層を使って、次元数がクラス数と一致するようなベクトルに変換する
-
歴史
- CNN
-
AlexNet: ILSVRC-2012年で優勝したネットワーク
- 現在の画像認識の基本的なアイディアがすべて提案されている
- Alex Krizhevsky: GPUを使って、大きなニューラルネットワークを、大きなデータセットで学習させるという構想を持つ
- 驚異的な実装能力と実験能力で実現させ、ニューラルネットワークが有効であることを世に示した。
- ドロップアウト: 学習時に、層中の一定数のユニットをランダムに一定確率で0にして学習を行う
- 推論時は補正した上ですべてのユニットを使って推論する。
- データオーグメンテーション: 訓練データを反転させたりノイズを加えたりして訓練データを水増しする
-
VGGNet: ILSVRC-2013年で二位を獲得したネットワーク
- AlexNetからの変更点
-
カーネルサイズを小さく
- AlexNet: 11 * 11
- VGGNet: 3 * 3
-
畳み込み層を深く
- AlexNet: 5層
- VGGNet: 16~19層
-
ブロックの導入: 層の組み合わせをパターン化し、複数層から成る一つの処理単位
- 空間サイズを半分に、チャンネル数を倍にする。
- VGG16とVGG19がある
-
GoogleNet: ILSVRC-2013年で優勝したネットワーク
- Inceptionモジュール: カーネルサイズが異なる畳み込み層を並列に並べ、その結果を結合する。
- 11,33,5*5のカーネルサイズが異なる畳み込み層を使う。
- 3*3のMaxPooling層の利用
- 異なるカーネルサイズを使うことで、認識対象の物体のスケールの違いに対応可能に。
-
足した場合と結合した場合
- 足した場合、どこ由来の情報かが不明になる
- ネットワークサイズを抑えられる
- 結合した場合、どこ由来の情報かを違うチャンネルとして区別して扱うことができる。
- 出力チャンネルが増え、計算量やメモリ量が増える
-
ResNet: ILSVRC-2015年で優勝したネットワーク
- スキップ接続やバッチ正規化が導入されている
- 層数が152まで増えた
- DenseNet: スキップ接続を複数のブロック間で繋げる
- 上位層に行くほど入力チャンネル数が増えている
-
SENet: ILSVRC-2017年で優勝したネットワーク
- 注意機構を導入して成功した最初の画像認識モデル
- チャンネルを対象とした注意機構
- Squeeze: 特徴マップを集約する操作。Averaged Pooling操作を適用し、空間方向を潰している。
- Excitation: 特定のチャンネルの情報のみを残す操作
-
Squeeze-Excitation操作の効果
- 最初のSqueeze操作によって、画像全体の特徴マップの情報を集め、その結果から画像全体では動物のようなものが写っていることがわかったとする。
- 動物に関連するようなチャンネル特徴だけを残すマスクを作成する
- Excitation操作で特徴マップから動物に関係するようなチャンネルだけを残し、他の種類の特徴を捉えているチャンネルを消す。
- 分類性能の向上、学習の安定化、収束の高速化、汎化性能の向上
- グローバル注意機構
- ViT: 自然言語処理分野で提案されたTransformerを使って画像分類を行う
- 畳み込み層を全く使わない
- 自己注意機構を適用
- CLSトークンと呼ばれる特別なトークンの特徴から各分類スコアを求める
- ViTは画像の低周波領域を中心に見るのに対して、CNNは高周波領域を中心に見る
- MLP
- 検出: どの位置に出現しているのか
- バウンディングボックス検出: 検出対象を囲むような矩形を推定する
- キーポイント検出: 検出する物体やタスクに応じてキーポイントを定義し、それを見つけるように学習する
- セグメンテーション(セマンティックセグメンテーション): ピクセルごとにそれがどのタスクに属するのかを推定する
- U-Net: 下層の特徴マップの情報をスキップ接続して利用する
- インスタンスセグメンテーション: 同じクラスであっても違う物体であれば、それらを別々の物体だと認識した上でセグメンテーションする問題設定
-
パノプティックセグメンテーション: 従来のセマンティックセグメンテーションとインスタンスセグメンテーションを同時に解くようなタスク
- stuff: 空や地面のように個別に分けられないもの
- thing: 人や車など個別に分けられるようなもの
- Mask R-CNN: 検出もインスタンスセグメンテーション結果も出力できる
-
R-CNN: 検出候補の列挙と候補を処理するネットワーク
- 各候補が実際に出現しているのかを調べ、正確な位置も推定するネットワーク
- RPN: 特徴を元に物体の検出候補を列挙するネットワーク
-
手順
- CNNを使った特徴抽出
- 検出候補の列挙
-
検出の特徴
- 検出対象の物体のスケールに非常に幅がある
- 検出対象物体の数は可変である
- 検出候補の推定
- RoIAlign: 検出候補で切り出された特徴マップを双線形補間を使って、固定サイズの特徴マップに変換する
- セグメンテーションの推定
- 画像認識の高速化: モバイル機器でリアルタイム処理が求められる場合が多く、処理性能や使用電力に制限があり、高いフレームレートを達成する必要がある。
-
グループ化畳み込み操作: チャンネルを同じ大きさのグループに分け、それぞれのグループ内のチャンネル間だけがつながっているように設計された畳み込み操作
- ResNeXT: グループ化畳み込み操作をResNetに適用したモデル
- 表現力は落ちるが、実験的には精度を保つことができた。
- パラメータを1/グループ数に減らすことができる。
- 異なるグループに属するチャンネル間で情報を交換できない。
- チャンネルシャッフル: チャンネルのシャッフル順序を決めておき、それに従って特徴マップをシャッフルする
-
深さごと畳み込み操作: 同じチャンネルからしか接続しないような畳み込み操作
- カーネルサイズの積 * チャンネル数
-
シフト: チャンネルをいくつかのグループに分け、各グループごとにその特徴マップを空間方向に、上下左右に一定数ずらすという操作を行うことで空間方向の情報を混ぜる。
- 計算量としては少ないが、大量のメモリ帯域を消費する。結果として計算コストが大きくなってしまう。
- メモリ帯域律速: プロセッサの演算器に入力データを供給する速度が全体の処理のボトルネックになっている状態のこと。
- アドレスシフト: 特徴マップの本体データを参照するアドレスポインタにオフセットを加えてずらすこと。
- メモリ帯域消費を抑え、実際の計算時間を大きく改善する
-
畳み込み操作は、空間中で近傍にある領域でしか接続していない。
- 遠くにある情報を使うことができない。
- Dilated畳み込み操作: 接続する対象をk個おきの遠方から集めるようにする方法
- Deformable畳み込み操作: どの位置から情報を集めるのかも学習によって決定する方法
-
音声認識
- 手順
-
フロントエンド: 波形データから特徴量を抽出するステップ
- Pre-emphasis: 波形の特徴を強調する
- 短時間フーリエ変換: 時間ごと、周波数ごとの強さを表すスペクトログラムに変換
- ローパスフィルタ: 音声と関係する低い周波数のみを残し、環境音やノイズに対応する高周波成分を除去する
- メルフィルタバンク: 人の聴覚を参考にし、周波数が大きくに成るにつれ、サンプリング数を少なくする
- 波形データを直接入力としてニューラルネットワークで処理する手法が登場し始めた。
-
音響モデル: 抽出された特徴量から音素への変換を行い、最終的には文字への変換を行う
- 音素: 音の最小構成単位
- RNNやCNNベースの手法
-
言語モデル: 与えられた文字列が意味的、用法的に尤もらしいかを評価する
- 正しい文字列に高いスコア、間違っている文字列に低いスコアを与えます。
- N-gramベースモデルからLSTMなどをつかったモデルに置き換わった。
- LAS(Listen attend spell): 音声波形の特徴ベクトルを入力、書き起こし文字列を出力として、end-to-endで学習できる
- 入力: 波形データを対数メルフィルタバンクに変換したものを利用する
-
ListenerとSpellerの2つのモデルで構成されている。
- Listener: 入力から特徴量を求めるモデル
- 双方向LSTMを利用している
- Speller(AttendAndSpell): 求められた特徴量から出力に対する確率分布を計算する
- 背景ベクトル: Listenerで計算された情報を注意機構を用いて読み取り、得られたもの
-
自然言語処理(NLP):
- 言語理解タスク: 大規模なテキストデータ(コーパス)を用いた事前学習手法を使ったアプローチが大きく成功している。
- Word2Vec
- Glove
-
BERT: 事前学習を使った言語の表現学習
- 大量の注釈なしテキストデータを使って学習することができる。
- 事前学習済みモデル
- Transformerという自己注意機構をモデルとして使っている。
- 自己注意機構で表現力を大きく向上できる
- 前後の文脈情報を見て文を深く理解する
- 大量のコーパスを利用し事前学習させる
-
GPT-2/GPT-3: 大量のコーパスを使って事前学習をし、さまざまなタスクを少量の教師あり学習データで学習することができます。