G検定単語帳 - ディープラーニングの概要
ニューラルネットワーク
動物の脳の内部で情報の処理や記憶を行っている、大量の微小な神経細胞が相互に網状に繋がった構造のこと。また、これを模式化した数学的なモデルをコンピュータ上で再現し、機械学習などの知的な操作に応用したもの。IT分野では専ら後者を指す。
脳の内部には「ニューロン」(neuron)と呼ばれる神経細胞が複雑に絡み合ったネットワークが存在し、神経系を通じて体内の器官から刺激を受け取ると、細胞間で互いに電気信号を交換し合い、記憶が形成されたり発話や運動など各器官への指示が出力されたりする。
この仕組みを抽象化して数理モデルとして定式化したものや、さらにコンピュータ上のソフトウェアなどに実装して情報処理に応用したものを「人工ニューラルネットワーク」(ANN:Artificial Neural Network)という。IT分野において、文脈上、本物の神経回路網と混同する恐れが無い場合は、このANNを指して単にニューラルネットワークと呼ぶ。
ニューラルネットワークの構造
模式化されたニューラルネットワークは、神経細胞を模したノードを層状に配置した構造を持つ。各ノードは固有のパラメータに基いて比較的単純な計算を行う能力を持ち、上位層の各ノードの計算結果を入力として所定の計算を行う。計算結果は下位層の各ノードへそれぞれ固有の重み付けを行った上で出力される。
最もよく知られる順伝播型の3層ニューラルネットワークの場合、ノードは「入力層」「中間層」(「隠れ層」とも呼ばれる)「出力層」の3層に分かれて配置される。最上位のノード群は処理対象のデータの入力を受け付ける「入力層」で、対象を表すデータモデルの構造に従って数や役割が設定される。
入力層のノードはそれぞれの入力値に基いて計算を行い、結果を「中間層」の各ノードへ伝達する。中間層のノードは入力層から受け取った値を合計し、やはり同じように計算を行って結果を「出力層」の各ノードへ伝達する。出力層の計算結果がネットワーク全体の出力(回答)となる。
機械学習への応用
各ノードが行う計算式の係数や、ノード間で値を伝達する際の重み付け(ノードxからノードyへの重みがwのとき、xの出力のw倍をyの入力とする)などのパラメータ群を対象や目的に合わせて調整すると、入力データから何らかの推論や予測、分類などを得るシステムを作ることができる。
例えば、手書きの数字が書かれた画像データを入力すると、『「1」の確率が90%、「7」の確率が10%』といったように何の数字が書かれているか推論(分類)するシステムや、賃貸物件の最寄り駅と駅からの距離、広さを入力すると家賃を予測(回帰)するシステムなどを構成することができる。
パラメータを開発者が一つ一つ決定していくことも理屈の上では不可能ではないが、実用的なシステムではパラメータの数も組み合わせも膨大な数にのぼるため手動で調整するのは現実的ではなく、実際のデータを「お手本」としてパラメータ調整を自動で行う「機械学習」(ML:Machine Learning)の手法が用いられる。
ニューラルネットワークの学習手法として最も一般的な「教師あり学習」では、入力データと出力すべき「正解」データをセットにした「教師データ」と呼ばれるデータの組を用意する。初期状態では各ノードのパラメータはランダムに決定しておき、教師データを入力すると当然ながらデタラメな出力を行う。
これを「正解」の出力データと比較すると、望ましい状態からのズレを定量的に評価することができる。このズレを(少しだけ)打ち消すように、各ノードのパラメータを出力層から遡って順番に修正していく(誤差逆伝播法)。これを様々な教師データを用いて繰り返し行うことで、教師データ群の傾向を学習し、似た入力に対して似た出力を返せるようになる。
ニューラルネットワークの種類
ニューラルネットワークにはノード間の結合の仕方や学習の仕方などによって様々な種類がある。どのノードも下層のすべてのノードへ結合するものを「全結合型」、入力から出力へ一方向に信号が伝播するものを「順伝播型」(フィードフォワード型)という。最も初期に考案されたニューラルネットワークは全結合の順伝播型にあたる。
一方、順伝播型だが層間が全結合になっていないものを「畳み込みニューラルネットワーク」(CNN:Convolved Neural Network)、信号の伝播を双方向に行うものを「再帰型ニューラルネットワーク」(RNN:Recurrent Neural Network/回帰型ニューラルネットワーク、リカレントニューラルネットワーク、循環ニューラルネットワークとも)という。また、中間層が2層以上(全体が4層以上)の深い階層を構成したものは「深層ニューラルネットワーク」(DNN:Deep Neural Network/ディープニューラルネットワーク)と呼ばれる。
他にも、教師なし学習を行うための「オートエンコーダ」や「ボルツマンマシン」、DNNで強化学習を行うための「DQN」(Deep-Q-Network)、データの生成が可能な「敵対的生成ネットワーク」(GAN:Generative Adversarial Network)、複素数や複素演算を扱うよう拡張した「複素ニューラルネットワーク」など、様々な種類のニューラルネットワークが考案されている。
CPU
コンピュータの主要な構成要素の一つで、他の装置・回路の制御やデータの演算などを行う装置。演算装置と制御装置を統合したもので、現代では一枚のICチップに集積されたマイクロプロセッサ(MPU:Micro-Processing Unit)を用いる。
CPUはメインメモリ(RAM)に格納された機械語(マシン語)のプログラムを、バスを通じて一命令ずつ順番に読み出し(フェッチ)、その内容を解釈して行うべき動作を決定(デコード)し、内部の回路を駆動して実際に処理を実行する。現代のCPUの多くはマイクロプログラム制御方式を採用しており、機械語の一命令は、より細かな動作(マイクロコード)の組み合わせに分解されてから実行される。
命令セット
CPUは実行可能な命令の体系が決まっており、これを命令セット(instruction set)あるいは命令セットアーキテクチャ(ISA:Instruction Set Architecture)という。記憶装置から読み出されたどのようなビット列がどのような動作に対応するかを定めたもので、機械語のプログラムはこれを用いて記述される。
命令セットは各CPUの機種ごとに固有だが、同じメーカーの同じ系列の製品では同じ命令セットが採用されることが多く、その場合は異なる製品が同じプログラムを実行することができる。同じ命令セットでも製品の世代が下るに連れて新しい命令が追加されることが多く、新しいCPUは古いCPU向けのプログラムも実行できる一方、古いCPUは新しい命令セットのプログラムは実行できないという関係になる(後方互換性)。
有力なメーカーの製品には、別のメーカーが同じ命令セットを採用した互換CPU製品を開発・販売することもある。例えば、米インテル(Intel)社のx86命令セットは広く普及しており対応ソフトウェアが豊富なため、これをそのまま実行できる互換CPUを米AMD社などが製造している。
構造
一般的なCPUの内部は、命令の解釈や他の回路への動作の指示などを行う制御ユニット、論理演算や算術演算を行う演算ユニット(ALU:Arithmetic and Logic Unit)、データの一時的な記憶を行うレジスタ、外部との通信を行うインターフェース回路などで構成される。
また、レジスタとメインメモリのあまりに大きな速度差、容量差を埋めるため、両者の中間の速度と容量を併せ持つキャッシュメモリが内蔵されることが多く、浮動小数点演算に特化した演算ユニット(FPU:Floating-Point Unit)なども標準搭載されることが多い。
以前はマザーボード上のチップセットや単体のICチップとして提供されてきた、メモリコントローラやI/Oコントローラ、グラフィックス処理(GPU)などの機能が統合された製品も数多く登場している。コンピュータに必要な機能のほとんどをCPUの内部に統合した製品はSoC(System-on-a-Chip)と呼ばれる。
性能
内部の演算回路やレジスタが一回の動作でまとめて伝送、保存、処理できるビット数が決まっており、この値が大きいほど一度に多くのデータを処理でき、また、広大なメモリ空間を一元的に管理できる。
一度にnビットのデータを処理できるCPUをnビットCPUというように呼び、CPUが発明された当初は4ビットであったが、8ビット、16ビット、32ビットと拡張されてゆき、現代では64ビットCPUが広く普及している。
また、ほとんどのCPUはコンピュータ内部の特殊な回路から一定周期で発信されるクロック信号に合わせて動作するようにできている。より高い周波数の信号で動作するものほど、単位時間あたりに多くの動作を行うことができ、性能が高い。例えば、2GHz(ギガヘルツ:毎秒10億回)で動作するCPUと1GHzのCPUならば、他の仕様が同じなら約2倍の速度差がある。
並行処理
単純な構造のCPUは一つの命令列から一つずつ順番に命令を取り出し実行していくが、現在のCPU製品の多くは、何らかの形で複数の命令、あるいは複数の命令列を同時並行に処理できる機能を内蔵しており、クロックあたりの性能を引き上げている。
よく用いられるのはパイプライン処理で、一つの命令を複数の段階に分割してそれぞれを別の回路で実行することにより、いくつかの命令の実行を並行して進めることができる。ある命令が実行段階にあるとき、次の命令がデコードを、その次の命令がフェッチを行うといったように、前の命令の完了を待たずに空いた回路に先行して次の命令を投入する方式である。
また、大抵の命令は限られた回路しか利用しないという性質を利用して、空いている回路で実行できる別の命令を同時に投入する方式を同時マルチスレッディング(SMT:Simultaneous Multithreading)という。擬似的に二つのプログラムを並行に実行することができ、最良の場合で数割の性能向上が果たせる。Intel社のCPUに内蔵されるハイパースレッディング(Hyper-Threading)機能が有名である。
一つの半導体チップの内部に、命令の解釈・実行を行うユニット(CPUコア)自体を複数搭載するという手法も広まっており、マルチコアプロセッサ(multi-core processor)という。それぞれが独立して別のプログラムを並列に実行でき、複数のCPUを搭載するのとほとんど同じ効果を得ることができる。ちなみに、一台のコンピュータに複数のCPUを内蔵する方式はマルチプロセッサ(multiprocessor)という。
GPU
コンピュータに搭載される半導体チップの一種で、画面表示や画像処理に特化した演算装置。特に、3次元グラフィックス(3DCG)描画や動画の圧縮・展開などに必要な演算を高速化する並列処理に優れた構造のもの。
コンピュータには制御や演算のためにCPU(MPU/マイクロプロセッサ)が搭載されている。これは汎用的に設計されており様々な命令を実行できるが、一度に実行できる命令は数個から数十個(数値演算並列化機能使用時)程度に限られる。
一方、GPUは画像処理などで多用される特定の比較的単純な数値計算に特化した演算回路を大量に内蔵しており、一度に数百回から数千回の演算を一気に実行することができる。CPUで同じ計算を行う場合よりはるかに高速に処理することができる。
また、グラフィック描画に関連する機能を豊富に用意しており、3次元から2次元への座標値の変換(ジオメトリ処理)、立体表面に貼り付けられた画像パターン(テクスチャ)や光、陰影などから各画素の表示色を決定する処理(シェーディング)などを高速に実行できる。
単体のICチップとして実装されたGPUを「dGPU」(ディスクリートGPU)と呼び、コンピュータのマザーボードに実装したり、ビデオカード(グラフィックカード)に搭載して拡張スロットに差し込んで使用する。CPUの内部にGPUの回路を統合したものは「iGPU」(内蔵GPU)と呼ばれ、廉価版のCPU製品などに組み込まれている。
GPUはコンピュータグラフィックスを多用するビデオゲームなどで主に用いられてきたが、近年では汎用の高速な数値計算装置として様々な分野で利用されるようになっており、これを「GPGPU」(General Purpose GPU)あるいは「GPUコンピューティング」(GPU computing)という。科学技術計算や暗号処理、仮想通貨、音声認識・合成、人工知能(機械学習)などの分野で広く普及している。
TPU
米グーグル(Google)社が開発した機械学習向けのプロセッサ。ニューラルネットワークで必要となる大量の行列演算を高速に実行することができる。
汎用の処理を行うCPUではなく、グラフィックス処理向けのGPUと同じように数値計算を高速に処理するのに特化した構造の特定用途向け半導体チップ(ASIC)の一種である。機械学習の高速化にはGPUを流用することが多いが、専用に設計されたチップを用いることで、高い計算性能とエネルギー効率を得ることができる。
行列演算で多用される、乗算と加算を組み合わせた積和演算を実行する演算ユニットを大量に内蔵しており、多数の数値を並列に計算することができる。内部に高速なHBM(High Bandwidth Memory)と呼ばれるメモリを内蔵しており、メインメモリから読み込んだ行列データを高速に演算装置に割り当てることができる。
ニューラルネットワークを利用した機械学習に特化した設計となっており、計算精度はそれほど高くなくても構わないため、初期の製品で8ビット、最新のモデルで16ビットの浮動小数点数を扱う。一般的なプログラムが扱う32ビットの単精度浮動小数点よりも高速な計算が可能となっている。
第1世代の製品は2016年に発表され、以後、ほぼ毎年のように新たなモデルが発表されている。基本的に同社内のAIシステムの構築や運用に用いられるが、クラウドサービス「Cloud TPU」で計算能力をサービスとして利用でき、一部のモデルは製品に組み込まれて外販もされている。
隠れ層
機械学習に用いられる人工ニューラルネットワークで、層状に重なったノード群の最初と最後を除く途中にある層のこと。上位層から与えられるデータを受け取り、重みを付けて下位層へ伝達する。この層の各ノードが持つ重みのパラメータが学習で変化することにより、複雑な処理が可能となる。
ニューラルネットワークとは
人工ニューラルネットワーク(人工知能の文脈では単にニューラルネットワーク)は、動物の脳の神経回路の構造と働きを模式化したモデルである。刺激に反応する神経細胞(ニューロン)を模したノードを層状に配置した構造で、入力層、1層以上の隠れ層(中間層)、出力層で構成される。
各ノードは固有のパラメータに基いて比較的単純な計算を行う能力を持ち、上位層の各ノードの計算結果を入力として所定の計算を行う。計算結果は下位層の各ノードへそれぞれ固有の重み付けを行った上で出力される。最上位の入力層は外部からデータを受け取り、最下位の出力層は外部へデータを出力する。
隠れ層の役割
隠れ層は入力層と出力層に挟まれた中間に配置された層である。各ノードは一層上のノードから伝達された値に、各上位ノードへの繋がりの強さを表す重み付けを行って加算する。加算した値は一層下の各ノードへ伝達するが、その際、「活性化関数」という関数を適用して非線形変換を行う。
ニューラルネットワークは隠れ層の数で分類されることがある。人工ニューラルネットワーク研究の初期に提案されたモデルは隠れ層がなく、入力層と出力層のみの「単純パーセプトロン」だった。中間に隠れ層を加え、3層以上で構成されるモデルは「多層パーセプトロン」(MLP:Multilayer Perceptron)という。
多層パーセプトロンのうち、隠れ層が複数(2層以上)あるものは「ディープニューラルネットワーク」(DNN:Deep Neural Network/深層ニューラルネットワーク)という。現代のニューラルネットワークのほとんどはこれに分類される。DNNは「ディープラーニング」(deep learning)の最も有力な実装方式の一つである。
入力層
機械学習に用いられる人工ニューラルネットワークで、層状に重なったノード群の最初の層のこと。外部から与えられるデータを受け取り、重みを付けて中間層へ伝達する役割を果たす。
ニューラルネットワークとは
人工ニューラルネットワーク(人工知能の文脈では単にニューラルネットワーク)は、動物の脳の神経回路の構造と働きを模式化したモデルである。刺激に反応する神経細胞(ニューロン)を模したノードを層状に配置した構造で、入力層、1層以上の隠れ層(中間層)、出力層で構成される。
各ノードは固有のパラメータに基いて比較的単純な計算を行う能力を持ち、上位層の各ノードの計算結果を入力として所定の計算を行う。計算結果は下位層の各ノードへそれぞれ固有の重み付けを行った上で出力される。最上位の入力層は外部からデータを受け取り、最下位の出力層は外部へデータを出力する。
入力層の役割
入力層はニューラルネットワークの最上位の層で、外部からの入力データを受け取るノードが並んでいる。各ノードは外部から値を受け取ると、重み付けに従って増減させた結果を一層下の中間層のノード群へ伝達する。重みは学習が進むに連れて変化していく。
入力層のノードは入力変数に対応しており、モデルで規定された変数の数だけノードが用意される。例えば、8×8ピクセルの画像を入力するモデルならば、64個のノードが各ピクセルの色情報を受け取る。中古車の買い取り価格を予測するモデルならば、車種、年式、色といった項目(変数)に対応するノードが用意される。
出力層
機械学習に用いられる人工ニューラルネットワークで、層状に重なったノード群の最後の層のこと。入力から得られた結論を解釈可能なデータに変換して外部に伝達する役割を果たす。
ニューラルネットワークとは
人工ニューラルネットワーク(人工知能の文脈では単にニューラルネットワーク)は、動物の脳の神経回路の構造と働きを模式化したモデルである。刺激に反応する神経細胞(ニューロン)を模したノードを層状に配置した構造で、入力層、1層以上の隠れ層(中間層)、出力層で構成される。
各ノードは固有のパラメータに基いて比較的単純な計算を行う能力を持ち、上位層の各ノードの計算結果を入力として所定の計算を行う。計算結果は下位層の各ノードへそれぞれ固有の重み付けを行った上で出力される。最上位の入力層は外部からデータを受け取り、最下位の出力層は外部へデータを出力する。
出力層の役割
出力層はニューラルネットワークの最下位の層で、入力データを隠れ層で処理した結果を受け取って集約し、所定のデータ形式で外部に出力する。出力内容はモデルの目的によって異なり、回帰問題であれば予測値、分類問題であれば入力データが当てはまるクラス(分類)などとなる。
複数のクラスのどれに当てはまるかを答える多クラス分類の場合は、可能性の高いクラスとその確信度の組を出力する。その際、隠れ層で得られた結果をソフトマックス関数(softmax function)にかけ、確信度の和が1(100%)となる確率分布として出力する。例えば、画像に写っている動物を分類するモデルであれば「猫0.75 犬0.15 狸0.06 狐0.04」といった具合である。
多層パーセプトロン
脳の神経細胞(ニューロン)を模したパーセプトロンのうち、入力層と出力層以外の隠れ層を持ち、3層以上で構成されるもの。隠れ層が複数あるものは「ディープニューラルネットワーク」と呼ばれる。
動物の脳は「ニューロン」(neuron)という神経細胞が集まってできている。ネットワーク状に相互に接続されたニューロン群が、外界からの刺激に基づいて相互に電気信号を送り合うことで、記憶や学習、発話、運動制御など様々な情報処理を実現している。
パーセプトロンとは
脳の働きを機械によって模倣しようとしたモデルの一つが「パーセプトロン」(perceptron)で、神経細胞を模したノードが層状に配置され、入力層のノードが外部からデータを受け取り、重み付けを行って下層のノードへ伝達する。出力層のノードは上位層からの情報を集約して一つの結論を外部に出力する。
このコンセプトは1957年にアメリカの情報科学者、フランク・ローゼンプラット(Frank Rosenblatt)が提唱した。当初はこれを専用の機械(ハードウェア)として実装することが構想され、入力層、中間層、出力層の3層の専用コンピュータ「Mark I Perceptron」が1958年に試作された。
多層パーセプトロン
初期には入力層と出力層の2層のみで構成された「単純パーセプトロン」(single-layer perceptron)が研究されたが、線形分離可能(直線で分けられるような分布)な分類問題しか解けないことが明らかになり、研究は下火となった。
非線形な問題を扱えるよう、入力層と出力層の間に隠れ層(中間層)を設けた多層パーセプトロンが提案された。しかし、コンピュータの性能や容量の制約や、効率的な学習方法が見出だせなかったことから研究は長期間停滞し、1990年代になり誤差逆伝播法が考案されたことで再び日の目を見ることとなった。
現代では多層パーセプトロンのことを「ニューラルネットワーク(NN:Neural Network)と呼ぶのが一般的で、「パーセプトロン」という名称は歴史的なものとなっている。2010年代には隠れ層を2層以上に増やした「ディープニューラルネットワーク」(DNN:Deep Neural Network)が飛躍的な性能向上を遂げ、今日の人工知能システムの有力な実装方式として普及している。
単純パーセプトロン
最もシンプルなニューラルネットワークのモデルで、入力層と出力層の2層からなるもの。脳の神経細胞(ニューロン)を模した機構で、二値の分類問題に答えることができる。
動物の脳は「ニューロン」(neuron)という神経細胞が集まってできている。ネットワーク状に相互に接続されたニューロン群が、外界からの刺激に基づいて相互に電気信号を送り合うことで、記憶や学習、発話、運動制御など様々な情報処理を実現している。
パーセプトロンとは
脳の働きを機械によって模倣しようとしたモデルの一つが「パーセプトロン」(perceptron)で、神経細胞を模したノードが層状に配置され、入力層のノードが外部からデータを受け取り、重み付けを行って下層のノードへ伝達する。出力層のノードは上位層からの情報を集約して一つの結論を外部に出力する。
このコンセプトは1957年にアメリカの情報科学者、フランク・ローゼンプラット(Frank Rosenblatt)が提唱した。当初はこれを専用の機械(ハードウェア)として実装することが構想され、入力層、中間層、出力層の3層の専用コンピュータ「Mark I Perceptron」が1958年に試作された。
単純パーセプトロン
単純パーセプトロンは最もシンプルなパーセプトロンのモデルで、複数のノードから成る入力層と、単一のノードに情報を集約する出力層の2層でできている。入力層のノードは外部から受け入れたデータに重みを付けて出力層へ送り、出力層は重み付き和を出力する。
この機構に様々なデータを与えて学習させることができる。入力と対応する出力のセットを用意しして、その入力を与えると期待される出力が現れるよう、各ノードの重みを変更するのである。学習後、学習データに似た入力を与えると、近い出力が現れることが期待できる。各ノードの持つ重みが、学習したパターンの「記憶」のように機能する。
単純パーセプトロンは汎用のパターン認識を実現する機構として期待されたが、行っていることは線形変換であるため、線形分離可能(直線で分けられるような分布)な分類問題しか解けないことが明らかになり、研究は下火となった。後に、入力層と出力層の間に隠れ層を挟んだ「多層パーセプトロン」(multilayer perceptron)、隠れ層を複数に増やした「ディープニューラルネットワーク」が考案され、今日の人工知能システムに発展している。
活性化関数
ニューラルネットワークの各ノードで、入力値に対して適用される関数。非線形変換になるような関数が選ばれ、計算結果は下の階層のノードへ出力(伝達)される。
人間の脳の神経細胞の働きを模した機械学習モデルである人工ニューラルネットワーク(ANN:Artificial Neural Network)では、あるニューロンは上の階層の複数のニューロンから入力値を受け取る。入力値はニューロン間の繋がりの強さに応じて重み付けされて加算される。
加算された値に対して実数倍など単純な操作だけを行って次のニューロンに出力したのでは単なる線形変換の繰り返しとなってしまい、階層を深くする意味がないため、入力値の和に対して非線形な変換を行う必要がある。この変換を行うのが活性化関数である。
初期の研究では、脳のニューロンの発火(外部からの刺激によって電気信号を他のニューロンに発信する現象)を模して「ステップ関数」が用いられた。これはある閾値(しきい値、基準となる値)を超えれば「1」を、超えなければ「0」を出力する関数である。
バックプロパゲーションなどの手法を用いる場合は微分できる関数であることが望ましいため、基準値付近で急激に出力値が上昇する「シグモイド関数」あるいは「tanh関数」(hyperbolic tangent:双曲線正接関数)などが好まれる。近年では、基準値以下では0、基準値以上では線形に出力値が上昇する「ランプ関数」(ReLU:Rectified Linear Unit)や、これを曲線で近似した「ソフトプラス」がよく用いられる。
Leaky ReLU関数
入力が0以下なら1以下の係数を掛けて返し、0より大きければその値をそのまま返す関数。ニューラルネットワークで用いられる活性化関数の一つで、ReLU関数の改良版である。負の値でも傾きを維持し、特定のノードで学習が停止してしまう問題を解消している。
ニューラルネットワークで各ノードが上位層のノードから受け取った値の和を非線形変換するために用いる「活性化関数」の一つである。研究初期に用いられたシグモイド関数やtanh関数では、出力層から誤差を遡って伝達していくと微分値の掛け算が繰り返されて初期層側で誤差が0に近くなってしまう「勾配消失」が大きな課題となった。
そこで、入力が0以下なら0を返し、0より大きければその値をそのまま返す「ReLU関数」(Rectified Linear Unit)が考案された。正の領域で微分値が常に1となるため勾配の消失が起こりにくく、単純であるため計算が容易で学習速度が速いという利点があった。
しかし、ReLU関数でも負の領域では微分値が0となるため、入力が負になるノードがあるとそれより前の層に誤差が伝わらなくなってしまう「死んだReLU問題」(dying ReLU)と呼ばれる現象が生じることがある。これを改善するため、負の領域でもわずかに傾いた直線となるように勾配を設けたのがLeaky ReLU関数である。関数の形としては、x>0 では 、x≦0 では (ただし、0<a<1)となっている。
ReLU関数
入力が0以下なら0を返し、0より大きければその値をそのまま返す関数。ニューラルネットワークの活性化関数として用いられる。計算が単純で学習を高速化でき、階層が深くなっても勾配消失が起こりにくいという特徴がある。
ニューラルネットワークで各ノードが上位層のノードから受け取った値の和を非線形変換するために用いる「活性化関数」の一つである。研究初期に用いられたシグモイド関数やtanh関数の課題であった、出力層から誤差を遡って伝達していくと微分値の掛け算が繰り返されて初期層側で誤差が0に近くなってしまう「勾配消失」が起こりにくい。
数式としては と表される。入力が正の領域ではグラフが の傾き45度の右上がりの直線となり、線形的に値が増加する。負の領域では常に0となる。極めて単純な形式であるため、ネットワークに非線形性を導入しつつも計算負荷を抑えることができる。
多数の層を重ねても学習が進みやすいとされ、畳み込みニューラルネットワーク(CNN)をはじめとする多くのモデルで標準的に採用されている。特に勾配計算の容易さが学習効率の向上に寄与し、大規模データセットを扱う際の学習時間の短縮、単位時間あたりの学習量の増大に繋がる点が好まれている。
一方で、入力が負の領域に入ると勾配が0になり、特定のノードの重みが更新されなくなる「死んだReLU問題」(dying ReLU)と呼ばれる現象が生じることがある。この点を改善するため、負の領域でもわずかに傾きを維持するLeaky ReLU関数などの派生手法も考案されている。ReLU自体は依然として簡潔で扱いやすい活性化関数として広く利用されている。
tanh関数
双曲線における正接(あるxにおけるxとyの比)を与える関数。ニューラルネットワークでは各ノードで入力値を出力値に非線形変換する活性化関数として用いられることがある。
双曲線は標準形で として与えられる図形である。単位円における三角関数と同じように正弦、余弦、正接などの関数を定義することができ、双曲線を意味する “hyperbolic” を付けて、それぞれ「sinh」「cosh」「tanh」と表す。
tanh関数は三角関数でいうtanに相当する関数で、あるxにおけるxとyの比(あるいは、との比)を表している。回転対称の単調増加関数で、xが0のときに0となり、xが正の無限大に向かうと1.0に漸近、負の無限大に向かうと-1.0に漸近する。
ニューラルネットワークでの使用
機械学習モデルの一つであるニューラルネットワークでは、各層のノード間で値を伝達する際に非線形変換になるようにするため、入力値に対して「活性化関数」を適用してから出力する。また、出力層では値をあらかじめ決められた形式に整形してから出力する必要がある。
tanh関数はグラフの原点を中心に出力値が-1から1の範囲を取るゼロ中心の点対称の形になっており、出力層で値を整形するのに用いられることがある。また、微分値の値域が0~1で、シグモイド関数の0~0.25よりも広いため、誤差逆伝播法で問題となる勾配消失が起きにくく、活性化関数としても優れている。
シグモイド関数
係数aと自然対数の底e(ネイピア数)を用いて として表される関数。任意の実数を0から1の範囲の値に変換することができる。
微分可能な単調増加関数で、定義域(入力値の範囲)は-∞~∞、値域(出力値の範囲)は0~1となる。入力が0のときに出力が0.5となり、入力が負の無限大に向かうと出力は0に漸近し、正の無限大に向かうと1に漸近する。任意の実数を、その大きさに応じて0~1の値に変換する働きを持つ。
シグモイド関数をグラフに描画したものを「シグモイド曲線」あるいは単に「シグモイド」と呼ぶ。緩やかな「S」の字の形に見えるため、ギリシャ文字で「S」に対応するシグマ(sigma)に、「~に似たもの」を意味する接尾辞 “-oid” を繋げて命名された。関数名には慣用的にシグマの語末形の小文字「ς」を用いる。
活性化関数としての使用
機械学習モデルの一つであるニューラルネットワークでは、各層のノード間で値を伝達する際に非線形変換になるようにするため、入力値に対して「活性化関数」を適用してから出力する。シグモイド関数は活性化関数として最初に採用された関数として知られる。
有力な学習手法である誤差逆伝播法(バックプロパゲーション)では、活性化関数の微分値を用いて重みの調整を行う。シグモイド関数の微分値は入力が0のときに最大値の0.25を取る。値域の0~1.0に対して0.25は低く、出力層から伝播を繰り返すうちに勾配がどんどんなだらかになってしまう「勾配消失問題」が起きやすいという欠点がある。
この欠点を克服するため、値域やグラフの形状はシグモイド関数に近いが微分値が低くなりにくい関数が様々に考案された。tanh関数(微分値の最大値も1)や、ReLU関数(微分値は入力が正なら1、負なら0)、Leakey ReLU関数(微分値は入力が正なら1、負でも0以上の定数)などがシグモイド関数に代わって用いられる。
ソフトマックス関数
与えられた複数の値について指数関数を取り、各値を全体の和で割った値に変換して出力する関数。すべての値が0から1の間の値に正規化され、全体の和が1になる。確率として解釈できるため、機械学習の多クラス分類の出力などでよく用いられる。
z1からzkまでk個の値があるとき、各々の値の指数関数(ネイピア数eの冪乗)ez1からezkまでを求める。それらの和Sを求め、各指数値を和で割った値 ez1/S, ez2/S, …, ezk/S を並べたものが出力となる。
元の値が大きいほど、対応する出力値も大きくなるが、元の値は指数として扱われるため、大きさの差が強調され、大きい値はより大きく、小さい値はより小さく評価される。出力値の和は1で、各値は0から1の間の値を取るため、元の値の大きさに応じた確率分布のように解釈することができる。
ニューラルネットワークでは、多クラス分類の最終層で各クラスに属する確率を出力する目的で広く用いられる。例えば、写真に写っている動物が何かを分類する課題について、各動物の確からしさを表す出力値が (猫:3, 犬:2, 狸:1) だった場合、これをソフトマックス関数にかけることで、(猫:0.665, 犬:0.245, 狸:0.090) のように変換される。これは結果が各動物である確率として解釈することができる。
勾配消失問題
ニューラルネットワークの学習過程で予測と正解の誤差を伝播させる際、層が深くなるほど誤差を伝えるための信号である「勾配」が極端に小さくなり、前の層へ伝播しなくなる現象。深層学習の黎明期において、多層ネットワークの学習を困難にしていた主要な課題の一つだった。
主に誤差逆伝播法(バックプロパゲーション)のメカニズムと、かつて一般的に使用されていた活性化関数の性質によって引き起こされる。誤差逆伝播法では、モデルの出力層で計算された予測値と正解の差(誤差)が、ノード間の繋がりの重みを更新するために、微分値(勾配)として前の層へと順次逆向きに伝達されていく。勾配には、層を通過するたびに活性化関数の微分値と重みが掛け合わされていく。
初期のディープラーニング研究では、活性化関数としてシグモイド関数やtanh関数などを使っていた。これらの関数は、入力値が大きすぎたり小さすぎたりする領域(飽和領域)で、微分値がゼロに非常に近くなるという性質を持っている。
この「ゼロに近い値」が層をまたいで何度も掛け算されると、連鎖律によって、勾配の値は指数関数的に減少し、入力層に近いネットワークの初期の層に到達する頃には、ほとんどゼロになってしまう。出力側からいくら誤差を伝達しても、初期層の重みの更新量は極めて小さくなり、これらの層が実質的に学習を停止してしまう。
現在では、微分値がゼロになりにくいReLU関数(Rectified Linear Unit)やそこから派生した関数を用いたり、重みの初期設定を工夫したり、バッチ正規化によってデータのばらつきを抑制したり、LSTMやGRU、ResNetといった特殊なネットワーク構造を導入することで、勾配消失問題が起きるのを防いでいる。
誤差関数
機械学習においてモデルの出力と正解とのズレを数量的に示す指標。この値が小さいほどモデルの予測が正解に近いことを示し、学習アルゴリズムはこの値を減らす方向へパラメータを更新していく。
学習データのように正解が分かっているデータについて、入力からモデルが算出した予測値と、実際の正しい値との間の「隔たり」を一つの数値として表現する。この値が小さいほど、モデルの予測精度が高いことを意味する。
誤差関数には、解決したい問題の種類に応じていくつかの種類がある。例えば、回帰問題(株価予測など連続した数値の予測)では、予測値と正解値の差を二乗してその平均を求める「平均二乗誤差」(MSE:Mean Squared Error)や、そのバリエーション(RMSEなど)がよく使われる。
一方、分類問題(画像認識などカテゴリーの予測)、では、「交差エントロピー誤差」(cross-entropy error)が標準的に使用される。これは、予測が正解カテゴリーからどれだけ離れているかを確率分布の類似度として測る指標で、モデルが正解の選択肢の確信度を高く、不正解の選択肢の確信度を低く出力するほど小さい値を示す。
モデルのパラメータを修正する最適化手法の多くは計算の過程で微分値を用いるため、誤差関数も微分可能なものを用いることが多い。例えば、勾配降下法では誤差関数の値をパラメータで微分して勾配を求め、勾配とは逆の方向にパラメータを少しずつ更新していくことで、誤差を徐々に減らしていく。
Contrastive Loss
機械学習で予測と正解の誤差を評価するのに用いる誤差関数の一つで、データ間の類似度にもとづいて距離関係を学習するためのもの。似ているサンプル同士を近づけ、異なるサンプル同士を遠ざけるようにモデルを更新するのに用いられる。
入力された二つのサンプルのペアと、それらが同じクラスか異なるクラスかを示すラベルを用いて定義される。一般的な形式では、同じクラスと判断される正例ペア(positive pair)については距離を小さくする方向に誤差が算出され、異なるクラスと判断される負例ペア(negative pair)では距離が一定以上離れるように誤差が算出される。
モデルはサンプルを埋め込み空間に写像する過程で、類似したデータは近く、非類似データは遠くという構造を自然に形成することができる。距離としてはユークリッド距離が広く用いられるが、目的に応じて他の距離尺度が採用されることもある。
なお、負例に対しては「マージン」と呼ばれる閾値が設定される。これは、異なるクラスに属するデータ同士が特徴空間上で最低限保つべき最小距離のことで、この値より大きく離れていれば損失を与えない仕組みになっている。異なるデータ同士がすでに遠く離れている場合に、無理にさらに遠ざけようとすることがなくなる。
Contrastive Lossは顔認証や類似画像検索など、データの類似度に基づいて識別を行う領域で活用されてきた。ラベルが限られた状況でもデータ構造をうまく捉えられる点が注目され、自己教師あり学習などにも応用されている。
Triplet Loss
機械学習で予測と正解の誤差を評価するのに用いる誤差関数の一つで、一組の3つのサンプル間の類似度に基づいて距離関係を学習するためのもの。モデルは類似性の高いデータはより近く、類似性の低いデータはより遠くなるように、効果的な特徴表現を獲得する。
入力として、基準となる「アンカー」(anchor)、アンカーと同じクラスに属する「ポジティブ」(positive:正例)、異なるクラスに属する「ネガティブ」(negative:負例)の3つのサンプルが組になったデータ(triplet:三つ組)を用いる。アンカーサンプルとポジティブサンプルの間の距離と、アンカーサンプルとネガティブサンプルの間の距離を算出し、その差を損失として与える。
その際、アンカーサンプルに対してネガティブサンプルの方がポジティブサンプルよりも離れている状態が好ましくなるように損失を算出する。ただし、両者の距離の差は、あらかじめ決められた閾値(マージン)以上になることを目標とする。十分に離れたと判断されたら、それ以上無理にさらに遠ざけようとしないようにするためである。
Triplet Lossを利用する際に重要なのは、学習に効果的な「ハードネガティブ」(hard negative)なサンプルを適切に与えることである。もしネガティブサンプルがすでにアンカーサンプルから非常に遠い(全然似ていない)場合、損失はすぐにゼロになり、学習に寄与しない。「アンカーサンプルに似ているが異なるネガティブサンプル」(モデルが間違えやすいサンプル)をどれだけ用意できるかが学習の質を左右する。
カルバック・ライブラー情報量
ある確率分布が別の確率分布とどれだけ異なるかを定量的に示す指標。機械学習では、二つの確率分布を一致させる目的で誤差関数の一部として利用されている。
ある分布Pと、Pに近似する分布Qの間で定義され、PがQからどれだけ「離れているか」を測る指標である。具体的には、Pに基づく期待値を用いて、P(x)がQ(x)とどれだけ異なるかを対数比で計算する。この値が0に近いほど、QはPをよく近似していることを意味する。0であれば両者は完全に一致している。
確率分布間の「距離」のような尺度として使われるが、非対称性のある指標であり、Pから見たQのKLダイバージェンスと、Qから見たPのKLダイバージェンスは一致しないことがある。これは、どちらの分布を「真の分布」として扱い、どちらを「近似分布」として扱うかによって、計算される誤差の意味合いが変わるためである。
深層学習においては、生成モデルが学習によって作り出すデータ分布Qを、訓練データが従う真のデータ分布Pにできる限り近づけるために、このKLダイバージェンスを誤差関数として最小化することを目標とする。機械学習だけでなく、ベイズ推定など様々な統計解析手法で用いられる。
交差エントロピー
ある確率分布が別の確率分布をどれだけ効率的に表現できているかを測る指標。主にニューラルネットワークの分類問題における誤差関数として用いられる。
分類問題では、正解ラベルの分布とモデルが予測した分布の間の不一致を定量化する。この値が小さければ小さいほど、モデルの予測が正解に近くなっていることを意味する。数学的には、正解分布の各要素に対して、予測分布の対数確率を掛けた値の負の総和として定義される。
「画像の動物は猫か猫でないか」といった二値分類の場合、「二値交差エントロピー」(BCE:Binary Cross-Entropy)が用いられる。これは、モデルの出力が単一の確率値(正例である確率)である場合に使用され、モデルが正解を間違って予測するほど、誤差が大きく計算される。
一方、「画像に写っている動物は何か」といった多クラス分類の場合、出力層にソフトマックス関数を適用して得られた確率分布に対して交差エントロピーが計算される。多クラスの交差エントロピーは、正解のクラスに割り当てられた予測確率(確信度)が低いほど、大きな誤差を算出する。これにより、モデルは学習の初期段階で大きな誤差を受け取り、効率的に正解の方向へパラメータを修正していくことができる。
交差エントロピー自体は様々な確率分布に適用でき、統計解析の様々な手法で用いられるが、機械学習では正解と予測の誤差として捉え、「交差エントロピー誤差」と呼ぶことがある。また、交差エントロピーを算出する関数を、予測の誤りの大きさを算出する誤差関数として捉え、「交差エントロピー誤差関数」と呼ぶことがある。いずれも概念的には同じである。
平均二乗誤差関数
実際の値と何らかのモデルに基づく予測値があるとき、両者の差を二乗して平均した値。予測モデルの評価に用いられる。
ある事象について実際に測定、観測などで確かめた値と、それぞれの値が得られた条件に基づいて予測関数などから導き出された予測値があるとき、両者の差(予測値の真値からの誤差)を二乗して足し合わせ、標本の数で割って平均を求めた値である。
予測モデルから得られた値が真の値に近ければ近いほど平均二乗誤差は小さくなり、逆に真値からのズレが大きくなればなるほど平均二乗誤差も大きくなるという関係にある。すべての真値を言い当てることができる完璧な予測モデルの場合には平均二乗誤差の値は0となる。
平均二乗誤差は二乗した値の平均であるため真値や予測値とは次元が異なり、同じ尺度で比較できない。このため、平均二乗誤差の平方根(ルート)を取って同じ次元に戻す操作を行った値で評価することもある。これを「平均二乗平方根誤差」(RMSE:Root Mean Squared Error)という。
正則化
統計解析や機械学習で、モデルが与えられたデータに適合しすぎる過剰適合・過学習を防ぎ、汎用的な予測性能を得るために用いられる手法の総称。モデルの複雑さに一定の制約を加えることで、未知データに対する性能低下を抑える。
回帰分析や機械学習では、モデルを複雑にすればするほど学習データ・標本データへの適合度を向上させることができるが、過剰に適合しすぎて外れ値やノイズ、偏りまで忠実に再現してしまい、未知データに対する予測性能が低下する「過学習」「過剰適合」(overfitting)という問題が生じる。
正則化はこれを防ぐために用いられる手法で、何らかの基準に基づいてモデルの複雑さを測定し、行き過ぎた複雑さに対してペナルティを与えることで、元になるデータへの詳細過ぎる当てはまりを防ぐ。出力と正解の差を測るための誤差関数(損失関数)にペナルティ項(正則化項)を追加するという手法が一般的である。
代表的な手法として、「L1正則化」と「L2正則化」がよく知られる。L1正則化はパラメータの絶対値和に基づくペナルティを課し、不要なパラメータをゼロに近づけることで特徴量選択の効果をもたらす。L2正則化はパラメータの二乗和にペナルティを与え、極端に大きな値を持つパラメータを抑えてモデルの安定性を高める。
回帰分析の場合は、L1正則化を適用した手法を「ラッソ回帰」(lasso regression)、L2正則化を適用した手法を「リッジ回帰」(ridge regression)という。ニューラルネットワークでは「ドロップアウト」のように一部のノードを学習中に無効化する仕組みを正則化として用いることもある。
L0正則化
統計解析や機械学習で、モデルが与えられたデータに適合しすぎる過剰適合・過学習を防ぐ正則化手法の一つで、ゼロでないパラメータの個数に比例したペナルティを課す方式。特徴量の数を最小化し、モデルを最も直接的にスパース化することができる。
回帰分析や機械学習では、モデルを複雑にすればするほど学習データ・標本データへの適合度を向上させることができるが、過剰に適合しすぎて外れ値やノイズ、偏りまで忠実に再現してしまい、未知データに対する予測性能が低下する「過学習」「過剰適合」(overfitting)という問題が生じる。
これを防ぐための手法を「正則化」(regularization)という。L0正則化はモデルの訓練時に用いられる誤差関数(損失関数)に、ゼロでないパラメータの数に係数(正則化係数)を掛けた正則化項を追加する。係数は事前に決めておくハイパーパラメータで、ペナルティの大きさを制御する。
正則化手法としては他に「L1正則化」「L2正則化」なども知られるが、L0正則化の特徴はパラメータの数そのものを用いる点である。モデルは最も重要な特徴量のみを使用して予測を行うため、解釈性が非常に高く、計算コストの低いスパース(疎)なモデルを構築できる。
ただし、「非ゼロ要素の数」は組み合わせ最適化問題で計算コストが高く、また、微分不可能なため勾配降下法のような標準的な最適化手法を直接適用することが難しい。実用上は何らかの近似法を用いたり、L1正則化など他の正則化手法が用いられることが多いとされる。
L1正則化
統計解析や機械学習で、モデルが与えられたデータに適合しすぎる過剰適合・過学習を防ぐ正則化手法の一つで、誤差関数にパラメータの絶対値和を加える手法。一部のパラメータをゼロにしてしまい、重要な特徴量のみを残す働きを持つ。
回帰分析や機械学習では、モデルを複雑にすればするほど学習データ・標本データへの適合度を向上させることができるが、過剰に適合しすぎて外れ値やノイズ、偏りまで忠実に再現してしまい、未知データに対する予測性能が低下する「過学習」「過剰適合」(overfitting)という問題が生じる。
これを防ぐための手法を「正則化」(regularization)という。L1正則化はモデルの訓練時に用いられる誤差関数(損失関数)に、すべてのパラメータの絶対値の和に係数(正則化係数)を掛けた正則化項を追加する。係数は事前に決めておくハイパーパラメータで、この値が大きくなるほど、より多くのパラメータがゼロに近づき、モデルは単純になる。
正則化手法としては他に「L2正則化」なども知られるが、L1正則化は他の手法に比べ、不要な特徴量に対応するパラメータを強制的にゼロにする性質を持つ。これは、その特徴量がモデルの予測にまったく影響を与えなくなることを意味し、モデルから重要度の低い特徴量を自動的に除外する特徴量選択の効果がある。回帰分析に対してL1正則化を適用した手法は「ラッソ回帰」(lasso regression)という。
L2正則化
統計解析や機械学習で、モデルが与えられたデータに適合しすぎる過剰適合・過学習を防ぐ正則化手法の一つで、誤差関数にパラメータの二乗和を加える手法。係数の大きさを均等に抑える働きを持つ。
回帰分析や機械学習では、モデルを複雑にすればするほど学習データ・標本データへの適合度を向上させることができるが、過剰に適合しすぎて外れ値やノイズ、偏りまで忠実に再現してしまい、未知データに対する予測性能が低下する「過学習」「過剰適合」(overfitting)という問題が生じる。
これを防ぐための手法を「正則化」(regularization)という。L2正則化はモデルの訓練時に用いられる誤差関数(損失関数)に、すべてのパラメータの二乗を合計して係数(正則化係数)を掛けた正則化項を追加する。係数は事前に決めておくハイパーパラメータで、モデルの柔軟性と抑制の度合いを制御する役割がある。
正則化手法としては他に「L1正則化」なども知られるが、L2正則化は他の手法に比べ、すべてのパラメータを均等に小さく抑えることで、特定の特徴量に過度に依存するのを防ぐ性質を持つ。多くの特徴量が適度に関係する問題に適している。回帰分析に対してL2正則化を適用した手法は「リッジ回帰」(Ridge regression)という。
ドロップアウト
脱落(する)、退学(する)、脱退(する)といった意味を持つ英単語。機械学習の分野では、ニューラルネットワークの過学習を抑えるため、学習時に一部のノードを確率的に無効化する手法を指す。正則化手法の一つで、学習データに過剰に適合することを防いで汎化性能を高めることができる。
ニューラルネットワークは多数のパラメータで強力な表現力を獲得するため、学習データに含まれる外れ値やノイズなど偶然的な特徴まで学習してしまい、未知データに対する性能が下がる「過学習」と呼ばれる現象が生じることがある。これを抑えるための手法を「正則化」(regularization)という。
ドロップアウトはこの正則化の手法の一つで、学習時にランダムに選んだ一部のノードを無効化し、入出力を一時的にゼロにする。無効化は訓練の繰り返し単位(イテレーション)ごとに行われ、停止されたノードも他の回では学習に参加する。
ネットワークは毎回異なる構造を持つことになり、特定のノードや重みに過度に依存せず、複数の経路を用いて特徴を抽出するよう促される。特定のノードが特定の入力パターンに過度に適応してしまい、他のノードがサボってしまう「共適応」(co-adaptation)と呼ばれる状態を効果的に予防することができる。
無効化は学習時にのみ行われ、推論時にはすべてのノードを有効にする。学習時に無効化操作が行われていたことを補正するため、重みや出力にスケーリングを行う方法が一般に用いられる。これにより、学習時と推論時の出力分布の整合性が保たれる。複数の異なるモデルを組み合わせて予測精度を高めるアンサンブル学習を一つのネットワーク内で実施するような手法と言える。
ラッソ回帰
回帰分析に、標本データへの過剰な当てはまりを抑えるL1正則化という手法を組み合わせたもの。重要な特徴量の取捨選択を行い、モデルの解釈性を高めることができる。
回帰分析ではモデルを複雑にすればするほど標本データへの適合度を向上させることができるが、過剰に適合しすぎて外れ値やノイズ、偏りまで忠実に再現してしまい、未知データに対する予測性能が低下する「過剰適合」(overfitting)という問題が生じる。
これを防ぐための手法を「正則化」(regularization)と呼び、ラッソ回帰は「L1正則化」あるいは「LASSO」(Least Absolute Shrinkage and Selection Operator)と呼ばれる方式を適用したものである。最小二乗法で用いる誤差関数(損失関数)に、回帰係数の絶対値和に係数(正則化係数)を掛けた正則化項を追加する。係数は事前に決めておくハイパーパラメータで、この値が大きくなるほど、より多くの係数がゼロに近づき、モデルは単純になる。
正則化を行う回帰分析手法としては他に、L2正則化を用いる「リッジ回帰」なども知られるが、ラッソ回帰は不要な特徴量に対応する係数を強制的にゼロにする特徴がある。これは、その特徴量がモデルの予測にまったく影響を与えなくなることを意味し、モデルから重要度の低い特徴量を自動的に除外する特徴量選択の効果がある。特徴量の多い高次元データで特に有効な手法とされる。
リッジ回帰
回帰分析に、標本データへの過剰な当てはまりを抑えるL2正則化という手法を組み合わせたもの。多重共線性(変数同士に相関がある状態)がある状況で回帰係数の不安定さを抑えることができる。
回帰分析ではモデルを複雑にすればするほど標本データへの適合度を向上させることができるが、過剰に適合しすぎて外れ値やノイズ、偏りまで忠実に再現してしまい、未知データに対する予測性能が低下する「過剰適合」(overfitting)という問題が生じる。
これを防ぐための手法を「正則化」(regularization)と呼び、リッジ回帰は「L2正則化」と呼ばれる方式を適用したものである。最小二乗法で用いる誤差関数(損失関数)に、回帰係数の二乗和に係数(正則化係数)を掛けた正則化項を追加する。係数は事前に決めておくハイパーパラメータで、この値が大きくなるほど、より強く回帰係数を抑制することができる。
正則化を行う回帰分析手法としては他に、L1正則化を用いる「ラッソ回帰」なども知られるが、リッジ回帰は特定の係数の影響を削ぎ落とすのではなく、すべての係数をバランス良く縮小させる特徴がある。説明変数が多く相関が高い状況でも、特定の変数の係数が異常に大きな値や不安定な値になることを防ぎ、過学習を防ぎつつ予測性能を維持しやすくなる。
誤差逆伝播法
ニューラルネットワークの学習過程で、出力結果と正解の差である誤差を出力層から入力層方向へ伝播させ、各ノードのパラメータを更新する手法。誤差が小さくなるようなパラメータの更新量を知るために必要な勾配(微分値)を効率よく求めることができる。
ニューラルネットワーク
ニューラルネットワークは、脳の神経細胞を模したノードが層状に多数配置された構造を持っている。各ノードは固有のパラメータに基いて比較的単純な計算を行う能力を持ち、上位層の各ノードの計算結果を入力として所定の計算(活性化関数)を行う。
計算結果は下位層の各ノードへそれぞれ固有の重み付けを行った上で出力され、上位層の各ノードから重み付き和を受け取ったノードは、自身の持つ「バイアス」という固有の値を加算して下層の各ノードへ伝達する。最上位の入力層は外部からデータを受け取り、最下位の出力層は外部へデータを出力する。
学習過程では、訓練データの入力値と対応する出力値(正解)を与え、内部の各ノードの持つパラメータ(重みとバイアス)を調整することで、訓練データに適応した状態を作り出す。ある入力値に対する現在のネットワークの出力値と正解の差を「誤差」(あるいは損失)と呼び、誤差が少なくなるように調整を行う。
勾配降下法
最適なパラメータを得るには、誤差を、入力をパラメータとする関数(誤差関数)の出力であると考え、この関数の出力が最小になるときのパラメータの値を求めれば良い。誤差関数が多項式などで定式化できるなら、微分した導関数が0になる方程式を解くといった解析的な手法(式の変形、導出、代入などの組み合わせ)で直接的に求めることができるが、ニューラルネットワークのような複雑な構造では難しい。
このような場合、関数に様々な数値を与えてみて出力を調べ、値が減る方向に少しずつパラメータを更新していく数値的な解法が用いられる。これを「勾配降下法」という。具体的には、数値微分などの手法で現在のパラメータにおける誤差関数の微分値(勾配:接線の傾き)を求め、出力がより小さくなる方向に向かってパラメータに一定の値(学習率)を加減算する。
これを何度も繰り返すと、関数の描く曲線を底に向かって下っていくように、出力が徐々に小さくなっていく。出力が最小となる底にたどり着くと勾配が0に近い値になり、それ以上パラメータの値が変動しなくなるため、繰り返しを打ち切ってパラメータを確定する。
誤差逆伝播法
誤差逆伝播法では、誤差は現在の各層のパラメータの歪みが蓄積された結果生じていると考え、出力層で得られた誤差の値を、ネットワークを逆にたどって入力層まで順番に伝達していく。各ノードは伝達された誤差をもとに、勾配降下法で自らの持つパラメータを誤差を減らす方向に更新する。
このとき、入力から出力を得る際に各層で値を伝達していく過程(順伝播)を合成関数と捉え、微分法における連鎖律の考え方を用いる。各層では下層から受け取った誤差と自らのパラメータから偏微分値(この層における勾配)を算出して勾配降下法を実行するが、連鎖律により下層の偏微分値を使えば簡単にこれを計算できる。
出力側から入力側に向かって一層ずつ順番に偏微分値の算出と誤差の伝達を繰り返すことで、各層のノードは自らが寄与した誤差を打ち消すようにパラメータの更新を行うことができる。本来、ネットワークの層が増えると微分値の計算量が爆発的に多くなり学習困難になっていたが、誤差逆伝播法により効率的に計算可能になったため、層の深いネットワーク(ディープニューラルネットワーク)が実用化されるようになった。
勾配消失問題
ニューラルネットワークの学習過程で予測と正解の誤差を伝播させる際、層が深くなるほど誤差を伝えるための信号である「勾配」が極端に小さくなり、前の層へ伝播しなくなる現象。深層学習の黎明期において、多層ネットワークの学習を困難にしていた主要な課題の一つだった。
主に誤差逆伝播法(バックプロパゲーション)のメカニズムと、かつて一般的に使用されていた活性化関数の性質によって引き起こされる。誤差逆伝播法では、モデルの出力層で計算された予測値と正解の差(誤差)が、ノード間の繋がりの重みを更新するために、微分値(勾配)として前の層へと順次逆向きに伝達されていく。勾配には、層を通過するたびに活性化関数の微分値と重みが掛け合わされていく。
初期のディープラーニング研究では、活性化関数としてシグモイド関数やtanh関数などを使っていた。これらの関数は、入力値が大きすぎたり小さすぎたりする領域(飽和領域)で、微分値がゼロに非常に近くなるという性質を持っている。
この「ゼロに近い値」が層をまたいで何度も掛け算されると、連鎖律によって、勾配の値は指数関数的に減少し、入力層に近いネットワークの初期の層に到達する頃には、ほとんどゼロになってしまう。出力側からいくら誤差を伝達しても、初期層の重みの更新量は極めて小さくなり、これらの層が実質的に学習を停止してしまう。
現在では、微分値がゼロになりにくいReLU関数(Rectified Linear Unit)やそこから派生した関数を用いたり、重みの初期設定を工夫したり、バッチ正規化によってデータのばらつきを抑制したり、LSTMやGRU、ResNetといった特殊なネットワーク構造を導入することで、勾配消失問題が起きるのを防いでいる。
勾配爆発問題
ニューラルネットワークの学習過程で予測と正解の誤差を伝播させる際、層が深くなるほど誤差を伝えるための信号である「勾配」が極端に大きくなり、学習が不安定になったり収束しなくなる現象。層の深いネットワークや、回帰層を含むRNNで特に問題になる。
主に誤差逆伝播法(バックプロパゲーション)のメカニズムによって引き起こされる問題の一つである。誤差逆伝播法では、モデルの出力層で計算された予測値と正解の差(誤差)が、ノード間の繋がりの重みを更新するために、微分値(勾配)として前の層へと順次逆向きに伝達されていく。勾配には、層を通過するたびに活性化関数の微分値と重みが掛け合わされていく。
このとき、勾配として算出された値が1より大きい場合、上層にはより大きな値が伝達される。これが層をまたいで何度も掛け算されると、連鎖律によって勾配の値は指数関数的に増大することになる。入力層に近いネットワークの初期の層に到達する頃には極端に大きな値になり、一度の更新で過剰に値を動かして学習が不安定になったり、正しく取り扱える上限値を超えてしまう。
勾配爆発問題を抑えるため、勾配の大きさに上限値を設け、これを超えた場合に強制的に縮減する「勾配クリッピング」という手法が用いられる。重みの初期化方法を適切に選ぶことや活性化関数を工夫することも有効な対策とされる。循環的な構造を持つ回帰型ニューラルネットワーク(RNN)では、長期依存を扱う際に勾配の爆発と消失が起こりやすいため、「ゲート構造」を内蔵するモデルが考案されている。
信用割当問題
機械学習において、モデル内の様々な要素が関わって最終的な出力を行ったとき、どの要素がどの結果にどのくらい影響したのかを正しく評価することが難しいという問題。時系列的に行動が連鎖する強化学習で特に問題となる。
例えば、予測や分類を行うニューラルネットワークが出力を行い、正解との誤差が観測されたとする。このとき、各層のノードのどのパラメータがどれだけ寄与したかを特定し、どの程度修正すれば良いかを評価しなければ、出力を正解に近づけることができない。もし、貢献度の低いパラメータに大きく修正してしまうと、学習が非効率になったり、意図しない方向に進んだりする可能性がある。
深い階層を持つニューラルネットワークで効率よく学習するにはこの問題を乗り越えなければならず、研究の停滞を招いたが、「誤差逆伝播法」(バックプロパゲーション)が考案され、この問題の突破口となった。この手法は、微分法の連鎖律を用いて出力層から入力層へと効率的に誤差を分配し、それぞれの重みに対する勾配(修正量)を計算する。各層のノードが最終的な誤差にどれだけ影響を与えたかを定量的に評価できるようになり、これに応じて重みを更新することが可能となった。
一方、強化学習の分野では、エージェント(学習主体)が一連の行動の連鎖を実行した後で、環境から報酬を受け取る。このとき、報酬を得るまでに実行した長い行動系列の中で、どの行動が報酬に最も貢献したのかを特定しなければならない。この時間的な遅延を伴う信用割当問題に対処するため、モンテカルロ法やTD学習といった手法が考案されている。これらの手法は、将来得られる報酬の予測手法(価値関数)を学習しながら、現在の行動が長期的な報酬に与える影響を定量的に評価する。
連鎖律
合成関数の微分を求めるための基本原則で、複数の関数が入れ子状になっているときはそれぞれの関数の導関数を掛け合わせることで全体の導関数を計算できるというもの。
連鎖律は、一つの変数が別の変数に依存し、その変数がさらに他の変数に依存する状況で、最終的な変化率を中間の変数を介して表す方法である。例えば、zがyの関数で、yがxの関数である場合、 は というように、各々の導関数の積として求めることができる。複雑な関数でも小さな部分に分けて微分できるため、数学的な処理が容易になる。
誤差逆伝播法と連鎖律
ニューラルネットワークの学習を効率的行う「誤差逆伝播法」は連鎖律を応用した手法である。ネットワークは各層が上下に接続された合成関数とみなせるため、出力における正解との誤差が、各層のノード間を繋ぐ重みやノード自身が持つバイアスなどのパラメータにどのような影響を受けているか評価する際に連鎖律の考え方を用いる。
各層のノードは、ノード間の重みと自らの活性化関数から、自らが下の層へ送り出した値の微分値(その層における偏微分)を求めることができる。連鎖律により、出力における誤差の微分値は、各層の偏微分値の積(ネットワークが分岐している箇所では和)として表される。
出力の誤差から各層の微分値(勾配)を実際に求めるには、最終的な誤差の微分値に下層側から順にその層の偏微分値を掛けていけばよい。各層では前の層で求めた微分値と自身の偏微分値だけを使って、簡単にその層における微分値を求めることができる。誤差がネットワークを遡って推論時とは逆向きに伝わっていくように計算するため「誤差逆伝播法」という。
勾配降下法
ある関数が最小となる入力を数値計算を繰り返して探索する手法の一つ。関数の傾き(勾配)を用いて、目的関数の値を小さくする方向へ変数を少しずつ動かしていく。解析的に解けない複雑な関数にも適用できるため、ニューラルネットワークの学習など、機械学習で特に広く応用されている。
ある関数が最小値となるときの変数の値を求める最適化問題の解法の一つである。関数の最小値を求めたいとき、関数が多項式など表される場合なら、これを微分した導関数が0になる方程式を解くといった解析的な手法(式の変形、導出、代入などの組み合わせ)が使えるが、実際には関数の形が分からなかったり、複雑すぎて導関数を求めることができないといった制約がある場合がある。
このような場合、変数に様々な値を代入してみて結果を調べ、出力が減る方向に少しずつ動かしていくというアプローチで近似的に最小値を求めることができる。具体的には、数値微分などの手法で現在の位置における関数の微分値(勾配:接線の傾き)を求め、勾配と逆方向(出力がより小さくなる側)に向かって移動する。
一度に動かす移動量は「学習率」と呼ばれるパラメータで決定される。この値が大きすぎると、底を飛び越えて前後を行き来するような振動状態に陥ってしまう場合があり、逆に、小さすぎると一度にわずかしか進まないため、なかなか底にたどり着かず収束が遅くなってしまう。問題の性質に合わせて適切な値を設定する必要がある。
この移動を何度も繰り返すと、関数の描く曲線を底に向かって下っていくように、出力が徐々に小さくなっていく。出力が最小となる底にたどり着くと勾配が0に近い値になり、それ以上移動しなくなるため、繰り返しを打ち切って位置を確定する。変数が複数あっても勾配を成分ごとに算出して移動するため、多次元のベクトルを扱う関数にも適用できる。
統計解析や機械学習の分野では、モデルのパラメータ推定に広く利用されている。データ数やパラメータが多い場合、解析的に解を求めることが困難あるいは不可能になるため、数値計算で解を求めるこの手法が有効となる。特に、ニューラルネットワークの学習においては、誤差逆伝播法という基本的な学習手法の中核的な要素として、各ノードのパラメータ更新に用いられる。
ハイパーパラメータ
機械学習における学習過程を制御するために人間が事前に決めておく各種の設定値のこと。データから自動的に学習されるパラメータとは区別される。モデルの性能や学習の安定性に影響するため、適切な設定が重要となる。
ハイパーパラメータは、モデル内部で訓練データによって最適化される重みやバイアスなどのパラメータとは異なり、学習前に人為的に与える値である。代表的な例として、ニューラルネットワークの隠れ層の数やノード数、学習率、エポック数、バッチサイズ、正則化係数などが挙げられる。同じモデルと学習手法でも、これらの設定によって学習の進み方や汎化性能が変化する。
ハイパーパラメータの値は、訓練データから自動的に学習されることはなく、通常は試行錯誤を通じて、最も良い性能を示す値が選ばれる。この最適な値を見つけ出すプロセスを「ハイパーパラメータチューニング」という。主な探索手法にはグリッドサーチやランダムサーチ、ベイズ最適化などがあり、モデルの評価指標を基準に有望な設定値が選ばれる。
AdaBound
機械学習などに用いられる勾配降下法を改良したアルゴリズムの一つ。動的に学習率を変化させるAdamアルゴリズムに、学習率の上限と下限を設けたもの。学習初期には高速で効率的に学習を進め、学習後半では汎化性能の向上を図る。
機械学習では多変数で非線形の複雑な関数の最適化を行うため、勾配降下法など数値的な解法を用いることがある。これは、ある地点から始めて、関数の値が下がっていく方向を微分値(勾配)を元に判断し、歩幅に相当する「学習率」という値ずつ移動していく手法である。
通常の勾配降下法では学習率として事前に設定した固定値を用いるが、Adamなどの改良されたアルゴリズムは勾配の値の履歴などを元に学習を進めながら動的に学習率を変動させる。誤差関数を高速で収束させ効率的に学習を進める効果があるが、学習率が極端な値を取る場合は汎化性能(未知データに対する成績)が下がる難点が知られていた。
AdaBoundではこの点を改良するため、学習率に動的な上限と下限を設定する。上限と下限に挟まれた範囲は学習の進行と共に徐々に狭まっていき、最終的には一定の値に収束するよう設計されている。これにより、学習終盤では通常の勾配降下法と同じような挙動となり、安定的に学習を終えることができる。
AdaDelta
機械学習などに用いられる勾配降下法を改良したアルゴリズムの一つで、パラメータごとに学習率を自動的に調整するもの。過去の勾配とパラメータ更新量について、それぞれ二乗の指数移動平均を算出してパラメータの更新量を決定する。
機械学習では多変数で非線形の複雑な関数の最適化を行うため、勾配降下法など数値的な解法を用いることがある。これは、ある地点から始めて、関数の値が下がっていく方向を微分値(勾配)を元に判断し、歩幅に相当する「学習率」という値ずつ移動していく手法である。
AdaDeltaは各パラメータについて勾配降下法を実施する際、学習率を用いずに、勾配と過去のパラメータの更新量の履歴から最適な更新量を導き出す。具体的には、過去の勾配の二乗和の平均を同じ期間のパラメータ更新量の二乗和で割って、その回の更新量とする。
二乗和の累積を求める際には、過去の各時点の値を時間経過に応じて指数的に減衰させ、遠い過去の値の影響を排除して直近の値を重視する。先行する「AdaGrad」アルゴリズムでは、学習が進むうちに累積和が単調増加して学習率が減少し続ける問題があったが、AdaDeltaでは指数移動平均を用いることでこの問題を解決している。
先行する「RMSprop」アルゴリズムに似た手法だが、RMSpropでは計算式の両辺の次元が整合していない問題を解消し、同じ次元同士の値から更新量を算出している。AdaDeltaでは学習率の明示的な指定が不要であるため、ハイパーパラメータの調整にかかる時間やコストを節約できる点が最大の利点とされる。
AdaGrad
機械学習などに用いられる勾配降下法を改良したアルゴリズムの一つで、パラメータごとに学習率を自動的に調整するもの。疎なデータ(大部分がゼロや欠損値)を扱う学習で収束を安定させる効果がある。
機械学習では多変数で非線形の複雑な関数の最適化を行うため、勾配降下法など数値的な解法を用いることがある。これは、ある地点から始めて、関数の値が下がっていく方向を微分値(勾配)を元に判断し、歩幅に相当する「学習率」という値ずつ移動していく手法である。
AdaGradは各パラメータについて勾配降下法を実施する際、勾配の大きさに応じて学習率を動的に変化させる。具体的には、過去に計算された勾配の二乗を積算し、その平方根で学習率の初期値を割ったものを実際に用いる学習率とする。
このような計算法により、頻繁に大きな勾配を持つパラメータは累積値が大きくなって更新幅が小さく抑えられる一方、稀にしか更新されないパラメータは累積値が小さくなるため一度で比較的大きな幅の更新が行われる。
特徴量の出現頻度に偏りがある状況でも効率的に学習が進むとされ、特に、自然言語処理のように高次元かつ疎なデータを扱う分野で広く利用されてきた。学習率の調整が自動的に行われるため、事前に手動で細かなチューニングを行う必要がない点もメリットである。
ただし、累積値は学習を進めると単調に増え続けるため、パラメータによっては学習率が極端に小さくなって更新がほとんど行われなくなる場合がある。この点を改善する手法として「RMSprop」や「Adam」といった派生アルゴリズムが開発されている。
Adam
機械学習などに用いられる勾配降下法を改良したアルゴリズムの一つで、パラメータごとに学習率を自動的に調整するもの。過去の勾配の平均と分散(二乗平均)の両方の情報を利用する。
機械学習では多変数で非線形の複雑な関数の最適化を行うため、勾配降下法など数値的な解法を用いることがある。これは、ある地点から始めて、関数の値が下がっていく方向を微分値(勾配)を元に判断し、歩幅に相当する「学習率」という値ずつ移動していく手法である。
Adamは各パラメータについて勾配降下法を実施する際、勾配の大きさに応じて学習率を動的に変化させる。具体的には、先行する手法である「モーメンタム」で用いられる過去の勾配の平均と、「RMSprop」で用いられる勾配の分散(二乗平均)を求め、前者を後者の平方根で割った値で学習率を増減させる。それぞれの平均の算出には、過去の一定の範囲まで時間経過に応じて減衰する指数移動平均を用いる。開始直後はこれらの値が過小評価される傾向があるため、バイアス補正を行う。
勾配の平均(一次モーメント)は方向情報を提供し、分散(二次モーメント)は勾配の大きさに応じた加減速を行うため、過度に大きな更新を避けつつ、必要な方向へ効果的に進む調整が可能となる。勾配が急激に変動する状況や、スケールの異なるパラメータが混在する状況でも安定した学習を行うことができる。
学習率の調整が自動的に行われるため、事前に手動で細かなチューニングを行う必要がない点もメリットである。様々な構造のモデルで良好な結果が得られるため、多くの深層学習フレームワークに標準実装されており、研究や実験から商用モデルまで幅広く利用されている手法である。
AMSBound
機械学習などに用いられる勾配降下法を改良したアルゴリズムの一つ。動的に学習率を変化させるAMSGradに、学習率の上下と下限を設けたもの。学習初期には高速で効率的に学習を進め、学習後半では汎化性能の向上を図る。
機械学習では多変数で非線形の複雑な関数の最適化を行うため、勾配降下法など数値的な解法を用いることがある。これは、ある地点から始めて、関数の値が下がっていく方向を微分値(勾配)を元に判断し、歩幅に相当する「学習率」という値ずつ移動していく手法である。
通常の勾配降下法では学習率として事前に設定した固定値を用いるが、Adamアルゴリズムやこれを改良したAMSGradなどの手法は、勾配の値の履歴などを元に学習を進めながら動的に学習率を変動させる。誤差関数を高速で収束させ効率的に学習を進める効果があるが、学習率が極端な値を取る場合は汎化性能(未知データに対する成績)が下がる難点が知られていた。
AMSBoundではこの点を改良するため、AMSGradの学習率に動的な上限と下限を設定する。上限と下限に挟まれた範囲は学習の進行と共に徐々に狭まっていき、最終的には一定の値に収束するよう設計されている。Adamでは大きすぎる学習率が、AMSGradでは小さすぎる学習率が問題となったが、範囲を限定して変動させることで極端な値になることを防いでいる。学習終盤では通常の勾配降下法と同じような変動幅の少ない挙動となり、安定的に学習を終えることができる。
RMSprop
機械学習などに用いられる勾配降下法を改良したアルゴリズムの一つで、パラメータごとに学習率を自動的に調整するもの。過去の勾配の二乗の指数移動平均を用いて学習率を更新する。
機械学習では多変数で非線形の複雑な関数の最適化を行うため、勾配降下法など数値的な解法を用いることがある。これは、ある地点から始めて、関数の値が下がっていく方向を微分値(勾配)を元に判断し、歩幅に相当する「学習率」という値ずつ移動していく手法である。
RMSpropは各パラメータについて勾配降下法を実施する際、勾配の大きさに応じて学習率を動的に変化させる。過去の勾配の二乗(分散)を平均した値で学習率の初期値を割ったものを実際に用いる学習率とする。二乗平均を求める際、古い値ほど時間の経過に応じて指数的に減衰する指数移動平均を算出し、直前の勾配情報を重視する。
先行する「AdaGrad」アルゴリズムでは、単純に累積和で初期値を割っていたため、学習が進むうちに学習率が減少していって更新が進まなくなる問題があったが、RMSpropでは古い値ほど減衰する指数移動平均とすることで遠い昔の値の影響を排除し、単調減少に陥らないよう工夫されている。
RMSpropは非定常(勾配の性質が途中で変化する)な環境での強化学習や回帰型ニューラルネットワーク(RNN)の学習などで特に安定性が得られやすいとされ、実用上も重要なアルゴリズムの一つである。後続の「Adam」アルゴリズムの基礎の一つとしてもよく知られる。
鞍点
変数が2つ以上ある多変数関数のグラフで、ある方向では極大値だが、別のある方向では極小値となる特殊な点のこと。局所的な最大値や最小値とは異なり、関数の勾配がゼロであっても安定性を持たない。
鞍点は二次元以上の関数解析で用いられる概念である。関数の形状を山と谷で例えると、鞍点は峠や馬の鞍のように前後方向で谷、左右方向で山となる位置に相当する。数学的には、点における勾配ベクトルがゼロとなり、ヘッセ行列(二次微分の行列)の固有値が正と負の両方を持つ場合に鞍点であると判定される。
統計解析や数理最適化では、目的関数を最適化する際に鞍点が現れることがあり、特に多数の変数を扱う高次元空間では、変数の組み合わせによって多数の鞍点が出現することがある。勾配降下法などの反復最適化手法では、鞍点付近で勾配が小さくなるため、学習や探索が停滞する場合がある。
鞍点は極値ではないため、最終的な解として採用されることは通常なく、最適解を探索する上での障害となることが多い。関数の形状や勾配の解析において、鞍点の存在を理解することは収束挙動の予測やアルゴリズム設計において重要である。
深層学習(ディープラーニング)では誤差関数の空間は非常に高次元であり、初期のアルゴリズムは多数の鞍点に阻まれて最適化が停滞する問題に悩まされたが、現在用いられている「Adam」や「RMSprop」のような適応的な学習率を持つ手法は、鞍点の周辺でも停滞することなく最小値に向かって抜け出すよう工夫されている。
イテレーション
反復、繰り返しという意味の英単語。IT分野では、ソフトウェア開発などにおける反復的な作業や工程のことや、プログラムにおける処理の繰り返しなどを指すことが多い。
開発プロセスにおけるイテレーション
システム開発の分野では、いわゆるアジャイル開発プロセスにおいて、一連の工程を短い期間にまとめ何度も繰り返すことで次第に完成度を高めていくアプローチが取られることがあるが、この繰り返しの単位となるサイクルのことをイテレーションということがある。
一回のイテレーションの構成や期間は開発手法によるが、概ね数週間の間に設計、実装、テストなどを実施する場合が多い。従来の大規模開発のように各工程を一回だけ順番に行うのに比べ、利用者の反応を見ながら柔軟に機能や構成を決めていくことができ、徐々に完成度を高めることができる。
処理のイテレーション
プログラミングの分野では、配列などに対する反復処理のことをイテレーションということがある。配列の各要素など、同種の複数の対象に同じ処理を順番に繰り返し実行する処理や、そのような処理を記述したコードのことを指す。
伝統的にはfor文など汎用の制御構文を用いてループ処理を記述するが、近年のプログラミング言語には「イテレータ」(iterator)など操作対象を指定して反復処理を行うために用意された専用の構文や関数、メソッドなどが用意されていることが多く、簡潔に反復処理を記述できる。
エポック
画期的な出来事、時代、紀元などの意味を持つ英単語。機械学習の分野では、学習プロセスの繰り返し単位で、学習データ全体を一通りモデルに与えて学習を完了させることを指す。モデルの性能改善が頭打ちになるまで、これを繰り返し実施する。
用意された学習データのセットを一巡し、すべてのデータの特徴を反映し終えた状態が1エポックとなる。ニューラルネットワークなどの学習では、更新されたパラメータを用いて再び同じデータを一巡させ、エポックを単位に何度も学習を繰り返す。パラメータの値が収束して更新されなくなったら最適化が完了したとみなして学習を終了する。
ニューラルネットワークは表現力が高いため、エポック数を増やして学習データへの適合度合いを高めていくと、学習データにたまたま含まれるノイズや外れ値などにも過剰に適合してしまい、未知データへの適合度が下がってしまう「過学習」(overfitting)という問題が生じる。エポックは単に多ければ良いというものではなく、汎化性能を最も高めるように適切な回数を選ぶ必要がある。
学習手法によっては、1エポックの中で複数回のパラメータ更新が行われることがある。パラメータ更新の回数を「イテレーション」(iteration)という。学習データが1024個ある場合、すべてのデータを計算してパラメータ更新を行う「バッチ学習」では1エポック1イテレーションだが、データを1つずつ取り出してその都度更新を行う「オンライン学習」では1エポック1024イテレーションとなる。少数のデータ群ごとに更新を行う「ミニバッチ学習」では、一度に取り出すデータの数(バッチサイズ)によってイテレーションは異なり、16個ずつなら64イテレーション、32個ずつなら32イテレーションとなる。
オンライン学習
機械学習モデルの訓練手法の一つで、訓練データからランダムに一つを選んでパラメータ更新を行うというプロセスを何度も繰り返す方式。選んだデータの偏りの影響を受けるため初期には学習が安定しにくいが、少ない計算資源でも利用できる。逐次新しい訓練データを追加して反映するといった状況に適している。
機械学習では、モデルによる予測と正解の隔たりである誤差関数が小さくなるように、訓練データから求めた値に基づいてモデル内部のパラメータ更新を行う。オンライン学習では、用意されたデータセットの中からランダムに一つを選んで誤差関数の勾配(修正すべき方向を示す値)を求め、パラメータの更新を行う。次々に新しい訓練データが届く状況では、新たに到着した順に一つずつ計算を行う。
一度の更新で一つのデータを用いて計算を行うため、バッチ学習のようにデータセット全体をメモリに呼び出す必要がなく、少ない計算資源でも短時間で一回の更新が行われる。ただし、毎回のデータのばらつきの影響が勾配計算に反映されるため、初期には学習が不安定になる場合があり、学習率を徐々に下げていくといった工夫が必要になる。
一方、訓練データ全体を用いて勾配計算を行う手法を「バッチ学習」という。全データを反映して勾配計算を行うため学習が安定しやすいが、規模によっては巨大な計算資源が必要で、データを追加すると膨大な再計算が必要になるといった難点がある。バッチ学習とオンライン学習の中間で、訓練データから少数のデータを選んで計算を行う手法は「ミニバッチ学習」と呼ばれる。
学習率
機械学習モデルがパラメータを一度にどれだけの幅で更新するかを決めた係数。初期値あるいは固定値を事前に決めておくハイパーパラメータの一つで、学習の速度と精度に影響する。
機械学習では、学習データの入力値からモデルが算出した予測値と正解の隔たり(誤差)を計測し、これを打ち消すように、モデルを構成するパラメータを現在の値から動かすという処理を繰り返す。一回の更新で加える値が学習率で、歩行における歩幅に相当する値である。
学習率を大きく設定すると、更新幅が大きくなるため少ない学習回数で一気に誤差を減少させることができるが、歩幅が大きすぎて最適解を通り過ぎてしまい、その前後を行き来する振動状態に陥ったり、山を飛び越えて発散してしまったりする危険が高まる。
逆に、学習率を小さく設定すると、最適解を逃さずに安定して収束しやすくなるが、歩幅が小さいためなかなか最適解にたどり着かず、学習回数や計算量を浪費して学習に長い時間がかかったり、用意された学習データの量では十分に最適解に近づくことができない場合もある。
適切な学習率の設定はモデル性能や学習効率に大きく影響を与える。学習手法によっては、事前に決めた一定値を使うのではなく、初期段階で大きめの学習率を用いて探索を行い、後半で小さくして微調整する「学習率スケジューリング」手法や、勾配の状況に応じて動的に学習率を調整する適応的最適化手法が用いられることもある。
確率的勾配降下法
勾配降下法の手法の一つで、学習データの中から一つを取り出して目的関数の勾配を計算し、パラメータを更新する手法。結果が収束するまでこのプロセスを繰り返して徐々にパラメータを調整していく。計算負荷を抑えつつ素早い更新が可能になる。
勾配降下法は、ある関数が最小値となるときの変数の値を求める最適化問題の解法の一つである。変数に様々な値を代入してみて結果を調べ、出力が減る方向に少しずつ動かしていくという数値的なアプローチで、関数の形が分からなかったり、複雑すぎて導関数の導出が困難な場合などに適している。
確率的勾配降下法は機械学習の誤差関数(損失関数)の最適化によく用いられる手法で、この方式を用いる学習手法を「オンライン学習」という。この手法では、学習データの中から一つのサンプルを無作為に選び、誤差関数の勾配を求めてパラメータを更新する。この処理を繰り返し行うことで、誤差を減らす方向へパラメータが徐々に調整される。
全データを用いて勾配を求める最急降下法(バッチ勾配降下法)に比べ、更新のたびに必要となる計算量が小さいため、大規模データセットに対して効率的に学習を進められる。勾配に含まれるノイズが大きい一方で、その揺らぎによって探索範囲が広がり、局所的な最小値から抜け出しやすくなる場合がある。
パラメータの更新が頻繁に行われるため、モデルはデータの変化に対して素早く反応し、学習の開始直後は高速に誤差が減少することが多い。ただし、勾配が不安定になりやすく、学習率を適切に設定しないと発散や収束の遅れが生じる可能性がある。一度に取り出すサンプルを一つではなく複数(少数)とする手法は「ミニバッチ勾配降下法」という。
グリッドサーチ
機械学習モデルのハイパーパラメータの最適な組み合わせを求める手法の一つで、あらかじめ用意した候補値の組み合わせを総当りで試して最も性能の良かった組み合わせを採用するもの。
ハイパーパラメータは学習過程を制御するために事前に決めておく各種の設定値で、モデルの仕様や学習の仕方を規定するものである。学習データによって導き出されるパラメータとは異なり、通常は学習プロセスそのものから自動的に最適な値を得ることはできない。
グリッドサーチはハイパーパラメータの最適な値を求める方法論の一つで、各設定値について候補となる値をあらかじめ列挙しておき、その組み合わせを網羅的に試行する。各組み合わせについて学習を繰り返し、検証データによるテストで最も性能の良かった組み合わせを採用する。
例えば、勾配降下法の学習率について{0.1, 0.01, 0.001}の3種類、ミニバッチ学習のバッチサイズについて{16個, 32個, 64個}の3種類の候補値がある場合、3×3=9通りのすべての組み合わせを設定してモデルを学習させ、最も性能の良いものを選ぶ。
探索が網羅的であるため、指定した範囲と刻み幅の中では最適な組を確実に見つけることができる。サポートベクターマシンなど少数のハイパーパラメータが性能に大きく影響するモデルや手法で利用されることが多い。
一方、ニューラルネットワークの深層学習のような複雑なモデルではハイパーパラメータの数や候補値の数、一回の学習プロセスに要する時間や計算資源が大きいため、試行回数が指数的に膨れ上がってしまったり、試行にかかる時間やコストが膨大すぎて実用的でない場合もある。そのような場合にはランダムサーチやベイズ最適化など確実性は下がるが試行回数を抑制できる他の手法が用いられる。
局所最適解
関数の最適化問題などで、ある限られた範囲では最も適した解であるような点。全体で最も適した解とは限らない。関数の勾配などに基づく数値的な解法では、傾きがゼロになるためそこで探索が停止してしまう問題がある。
関数のグラフを描いたときに山の頂点や谷底になっている箇所で、周囲に比べて最も高い、あるいは低い状態になっているが、関数の定義域全体を調べたときに最も高い・低い箇所である大域最適解になっているとは限らない。
機械学習では多変数で非線形の複雑な関数の最適化を行うため、勾配降下法など数値的な解法を用いることがある。これは、ある地点から始めて、関数の値が下がっていく方向に向かって少しずつ移動していく手法だが、底に到達すると勾配がゼロになり、そこが大域最適解でなくても探索を停止してしまう。
局所最適解が存在すると、モデルの訓練結果が初期値に強く依存するという問題が生じる。パラメータの初期設定が異なると、勾配降下法が異なる「谷」に誘導され、それぞれ異なる局所最適解に収束し、異なる結果となるためである。局所最適解に留まらずに大域最適解を探索させるため、モーメンタムやAdamなどの学習率に「慣性」を加える最適化手法や、訓練中にあえてノイズを加える手法などが考案されている。
早期終了
機械学習でモデルの汎化性能を高める手法の一つで、これ以上学習を続けると過学習が生じる可能性が高いと判断した時点で学習を打ち切ること。学習のし過ぎで学習データの余計な細かい特徴まで学んでしまうことを防止する。
ニューラルネットワークは表現力が高いため、同じ学習データで何度も学習を繰り返して適合度合いを高めていくと、学習データにたまたま含まれるノイズや外れ値などにも過剰に適合してしまい、未知データへの適合度(汎化性能)が下がってしまう「過学習」(overfitting)という問題が生じる。
早期終了はこれを防ぐためのテクニックの一つで、何らかの指標を用いて過学習の兆候を検知し、これ以上学習を続けると適合が行き過ぎてしまうと判断した時点で学習を打ち切って、その時点のパラメータでモデルを完成とする。
一般的な判断手法では、学習データを一巡するエポックという繰り返し単位が終わるごとに未知データでテストを実施し、一定のエポック数の間、未知データに対する性能の改善が見られなくなったら学習を打ち切る。学習の繰り返しで学習データに対する性能が上がり続けても、ある時点で過学習が始まり未知データに対する性能が落ち始めるからである。
早期終了は、汎化性能を高めるだけでなく、モデルの訓練時間と計算資源の節約にも繋がる。また、ハイパーパラメータ(事前に決めておく設定値)の一つであるエポック数を学習しながら自動的に決定することができるため、適切なエポック数を手動で探す手間も省ける。
大域最適解
関数の最適化問題などで、定義域全体で最も適した解であるような点。関数の値が定義域内のどの点と比較しても優れている点であり、数理最適化や統計解析において最終的な目標となる。
関数のグラフを描いたときに山の頂点や谷底になっている箇所を「局所最適解」という。周囲に比べて最も高い、あるいは低い状態になっている点である。このうち、関数の定義域全体を調べたときに、最も高い・低い箇所のことを大域最適解という。
機械学習では多変数で非線形の複雑な関数の最適化を行うため、勾配降下法など数値的な解法を用いることがある。これは、ある地点から始めて、関数の値が下がっていく方向に向かって少しずつ移動していく手法だが、局所最適解に到達すると勾配がゼロになり探索を停止する。
局所最適解が一つの場合は底に到達すれば自動的にそこが大域最適解であるため問題ないが、機械学習で扱うような多次元の複雑な関数では多数の局所最適解が存在する場合がある。機械学習では誤差関数の大域最適解を見つけることが最も性能を高めることに繋がるため、局所最適解で留まらずに大域最適解を求める工夫が必要となる。モーメンタムやAdamなど、学習率に「慣性」を加えて局所最適解を脱出する手法や、訓練中にあえてノイズを加える手法などが考案されている。
二重降下現象
機械学習で観察される現象の一つで、モデルの複雑さを増やしていくと最初は汎化誤差が低減し性能が向上するが、過学習により誤差が増大し性能が悪化した後、更に複雑さを増やし続けると再び誤差が低減し始める現象。伝統的な統計学の知見では説明できない挙動として知られる。
機械学習モデルの複雑さ(パラメータ数など)を増やしていくと表現力が向上し、最初は学習データに対しても未知データに対しても性能が向上(誤差は低減)していくが、複雑にしすぎると学習データに含まれるノイズやばらつきまでも詳細に再現するようになってしまい、未知データに対する性能が悪化する「過学習」が生じる。
従来の理論では過学習を起こしたモデルは複雑にすればするほど過学習が悪化し未知データでの誤差(汎化誤差)は増大し続けると考えられてきたが、大規模な深層学習モデルの学習では、パラメータ数が学習データ数を上回りさらに複雑化していくと、増大した汎化誤差が再び減少に転じるという二段階の降下が観察された。
二重降下現象は隠れ層の数が深くパラメータ数の多い深層ニューラルネットワーク(DNN)で発見され、パラメータ数だけでなく学習回数(エポック数)など過学習を引き起こす他の要因によっても生じたとする報告もある。極めてパラメータ数の多い複雑なモデルで発生するため、どのような機序で発現するのかはっきりしたことは分かっておらず、様々な仮説が提唱されている。
ノーフリーランチの定理
数理最適化の定理の一つで、あらゆる問題に対して常に最良の性能を表す万能の最適化アルゴリズムは存在しないことを示すもの。特定の問題で最も優れた方法も、別の問題では最高の性能を保証することはできない。
1995年に物理学者のデイビッド・ウォルパート(David H. Wolpert)とウィリアム・マクレディ(William G. Macready)が証明した定理である。「ノーフリーランチ」(タダ飯など無い)は英語の定型句で、コストを支払わずに価値のあるものを手にすることはできず、一見無償に見えるものも必ず何らかの代償を支払う羽目になるという格言である。
この定理は、数学的な問題を解く探索アルゴリズムについて、どのようなアルゴリズムであっても、すべての問題に適用した結果の平均性能は等しくなることを表している。特定の問題で極めて優れた性能を示したとしても、前提が異なる他の種類の問題では性能が悪化し、ありとあらゆる問題に適用して結果を平均すれば良い結果と悪い結果が相殺されてどれも同じ性能となってしまう。
万能アルゴリズムが存在しないことが確かな以上、ある問題領域に最も適したアルゴリズムは、その問題における前提条件や仮定、扱うデータの特性などを反映したモデルや手法を適切に組み合わせたものとなる。特定の問題に特化した工夫や調整を加えることが、実用的に最も優れた成果を得るための鍵となることを示している。
バッチ学習
機械学習モデルの訓練手法の一つで、訓練データを一度にまとめて計算し、パラメータ更新を行う手法。全データの性質を反映した更新を行うため学習が安定しやすいが、規模によっては巨大な計算資源が必要となる。新しいデータを逐次与えて更新するといった用途には向かない。
機械学習では、モデルによる予測と正解の隔たりである誤差関数が小さくなるように、訓練データから求めた値に基づいてモデル内部のパラメータ更新を行う。バッチ学習では、用意されたデータセットのすべてのデータを用いて誤差関数の勾配(修正すべき方向を示す値)を求め、パラメータの更新を行う。
データセット全体の傾向を反映した勾配に基づいて更新を行うため、最適解に向かって安定的に収束しやすいとされる。一方、すべてのデータをメモリに読み込んで計算を行うため、データの規模によっては現実的でない場合がある。新しい訓練データを追加する場合はデータ全体を再計算しなければならず、迅速に反映させることは難しい。
一方、訓練データからランダムに一つのデータを選んで勾配計算を行うというプロセスを何度も繰り返す手法を「オンライン学習」という。一回に一つのデータのみが必要なため計算資源を節約でき、逐次新しいデータを追加してモデルに反映するといった操作が可能となる。バッチ学習とオンライン学習の中間で、訓練データから少数のデータを選んで計算を行う手法は「ミニバッチ学習」と呼ばれる。
ミニバッチ学習
機械学習モデルの訓練手法の一つで、訓練データを複数の小さなまとまりに分割し、まとまりごとにパラメータ更新を行う方式。いっぺんに全データを用いる手法と一つずつ用いる手法の中間的な性質を持ち、計算効率と安定性を両立しやすい。
機械学習では、モデルによる予測と正解の隔たりである誤差関数が小さくなるように、訓練データから求めた値に基づいてモデル内部のパラメータ更新を行う。ミニバッチ学習では、用意されたデータセットを複数の「ミニバッチ」という単位に分割し、この単位ごとに誤差関数の勾配(修正すべき方向を示す値)を求め、パラメータの更新を行う。
一度にすべてのデータを用いる手法を「バッチ学習」、ランダムに一つを選んで用いる手法を「オンライン学習」というが、ミニバッチ学習は両者の中間的な手法である。毎回の更新に少数のミニバッチを用いるため、データセットが大きい場合でもバッチ学習のように巨大な計算資源が不要で高速に計算を行うことができる。一方、複数のデータを用いて計算を行うため、オンライン学習のようにデータごとのばらつきの影響を受けにくく、学習を安定させやすい。
機械学習では、データセット全体を一回通して学習すること(およびその回数)を「エポック」(epoch)と呼び、エポックの中でパラメータ更新を行う回数を「イテレーション」(iteration)という。1024個のデータセットを用いる場合、バッチ学習では1エポック1イテレーション、オンライン学習では1エポック1024イテレーションだが、ミニバッチ学習ではバッチサイズによってイテレーション数が異なる。16個ずつ更新するなら1エポック64イテレーション、32個ずつなら32イテレーションとなる。バッチサイズは任意に指定できるが、GPUなどの計算効率から2の冪乗(2,4,8,16,32…)が選ばれることが多い。
モーメンタム
勢い、機運、契機、運動量などの意味を持つ英単語。機械学習の分野では、数値的な最適化手法において過去の勾配の値を反映して学習率を動的に増減させる仕組みを指す。関数の下り坂に沿って勢いをつけて移動するようなイメージからこのように呼ばれる。
機械学習では多変数で非線形の複雑な関数の最適化を行うため、勾配降下法など数値的な解法を用いることがある。これは、ある地点から始めて、関数の値が下がっていく方向を微分値(勾配)を元に判断し、「学習率」という幅ずつ移動していく手法である。
モーメンタムは、物理学における運動量の概念に着想を得ており、現在地点の勾配だけでなく直前の一定期間の勾配を記録しておき、これを加味して学習率を増減させる。過去の勾配を指数的に減衰させながら累積したものを学習率とすることで、谷底へ下る際には加速を促し、底付近で移動方向が左右に目まぐるしく入れ替わる領域では振動を抑えて収束を早める。
特に、小さい勾配が続く平坦な谷や、深い谷が細長く伸びる形状の関数に対しては、標準的な勾配降下法より効率的に最適解へ近づけることが知られ、最適化の速度向上、学習時間の短縮、計算資源の節約に役立つ。また、モーメンタムが「慣性」の働きをするため、浅い谷では停止せずに飛び越えて探索を継続し、局所最適解に陥らず大域最適解に到達できる場合がある。
モーメンタムの挙動は「減衰率」と呼ばれるハイパーパラメータ(事前に決めておく設定値)に依存する。この値が大きいほど、過去の勾配の影響を強く受け継ぎ、より大きな勢いを持つことになる。加速効果と安定性のバランスを調整するための係数である。深層学習では標準的な要素として広く利用され、「Adam」や「RMSprop」などモーメンタムの考え方を発展させた様々な手法も考案されている。
ランダムサーチ
機械学習モデルのハイパーパラメータの最適な組み合わせを求める手法の一つで、あらかじめ用意した候補値や範囲から無作為に値を取り出して組み合わせ、様々な組で実際に学習を行って最も性能が良かったものを採用する方式。
ハイパーパラメータは学習過程を制御するために事前に決めておく各種の設定値で、モデルの仕様や学習の仕方を規定するものである。学習データによって導き出されるパラメータとは異なり、通常は学習プロセスそのものから自動的に最適な値を得ることはできない。
ランダムサーチはハイパーパラメータの最適な値を求める方法論の一つで、各設定値について候補となる値を列挙するか範囲を指定しておく。一回の試行では候補値をランダムに取り出して組み合わせ、学習をさせて検証データで性能を計測する。これを規定の回数繰り返し、最も性能の良かった組を採用する。
ランダムサーチは確実に最良の値の組を見つけられるとは限らないものの、それぞれのパラメータを独立してランダムに変動させながら探索するため、高性能な結果をもたらす有効なパラメータ値が探索空間のどこにあっても、少ない試行回数で効率よく発見することができるとされる。
一方、すべての組み合わせを網羅的に試行する方式は「グリッドサーチ」という。確実に最良の組み合わせを見つけられるが、ハイパーパラメータの数や候補値が多い場合や、一回の試行に必要な時間や計算資源が大きい場合にはすべての組を探索するのは現実的でない場合がある。ランダムサーチは限られた時間や資源で効率よく良い値を見つける手法としてグリッドサーチの代わりに用いられる。