4. ディープラーニングの概要

4-1. ニュートラルネットワークとディープラーニング

本節では、ディープラーニングを理解するうえで押さえておくべき事柄をまとめています。ディープラーニングの土台となるニューラルネットワークとは何か・どのようにしてディープラーニングを実現したのかについて見ていきます。

1.ディープラーニングの基本

1.1 単純パーセプトロン

ニューラルネットワーク (neural network)は、2章でも言及したとおり人間の脳の中の構造を模したアルゴリズムです。 人間の脳にはニューロンと呼ばれる神経細胞が何十億個と張り巡らされており、これらのニューロンは互いに結びつくことで神経回路という巨大なネットワークを構成しています。人間は何か情報を受け取ると、ニューロンに電気信号が伝わります。そしてこの電気信号はネットワーク内を駆け巡ります。このとき、ネットワークのどの部分に対してどれくらいの電気信号を伝えるかによって、人間の脳はパターンを認識していることになります。

ニューラルネットワークはこのニューロンの特徴を再現できないかと試した手法です。例えば図4.1は、複数の特徴量(入力)を受け取り、1つの値を出力するという、単純なニューラルネットワークのモデルです。これを単純パーセプトロン (simple perceptron) と呼びます。このモデルは複数の特徴量 (入力)を受け取り、1つの値を出力します。ニューラルネットワークは人間の脳の神経回路が層構造になっている (と考えられている)のにならい、入力を受け取る部分を入力層、出力する部分を出力層と表現します。入力層における各ニューロンと、出力層におけるニューロンの間のつながりは重みで表され、どれだけの電気信号(値)を伝えるかを調整します。そして、出力が0か1の値をとるようにすることで、正例と負例の分類を可能にします。


図4.1


また、この出力は0か1ではなく、0から1の値をとるようにし、閾値の調整をすることもできます。入力層から出力層へとどのように値を伝播させるかは、関数で表現されるわけですが、0から1の値をとるようにする場合は、シグモイド関数を用います(その場合はモデル名称も変わってきますが、詳細は3章の3-12.2 ロジスティック回帰」を参照してください)。

実はこの単純パーセプトロンは、前述したロジスティック回帰と数式上の表現は全く同じになります。またここでいうシグモイド関数のように、層の間をどのように伝播させるかを調整する関数を活性化関数と言います。 同じ形をしたニューラルネットワークでも、活性化関数を何にするかによってモデルの表現は変わるわけです。活性化関数に関してもディープラーニングの研究過程で色々考案されており、どんな活性化関数を用いるかでモデルの性能にも大きな差が出てきます。活性化関数の詳細については4-6「活性化関数」でまとめています。

1.2 多層パーセプトロン

人間の脳を模したアルゴリズムである単純パーセプトロンですが、残念ながらこのモデルが実際の予測で使われるケースはほとんどありません。神経回路をモデル化するのに入力層一出力層のつながりを考えたわけですが、これだけではまだまだモデルが単純すぎて、複雑な問題に対応することができないのです。

実際、入力層一出力層で表現されたモデルは、分類問題においては対象データが2次元ならば1本の境界線 (多クラス分類ならばクラス数N-1本) を引いてデータを分類しているに過ぎず、これは線形分類問題しか解くことができないことを意味しています。

データの分布がきれいに直線で分けられるといった問題は現実にはほとんどなく、分布が複雑な非線形分類問題であることが大半です。こうした問題に対応できるようにするために、より複雑な構造のニューラルネットワークにしていく必要がでてきました。

そこで考えられたのが、入力層一出力層以外にさらに層を追加するというアプローチです。層を追加したモデルは多層パーセプトロン(multi-layer perceptron) と呼ばれます。図4.2が多層パーセプトロンの概要図となります。図にあるように、入力層と出力層の間に追加された層を隠れ層と言います(中間層と呼ぶこともあります)。隠れ層を追加したことによりモデル全体の表現力が大きく向上し、多層パーセプトロンでは非線形分類も行うことができるようになりました。

図4.2

単純パーセプトロンと比較すると、隠れ層が追加されたことによりモデルは一見複雑になりましたが、各層を順番に見ていくと、実際は「同じ構造が繰り返されているだけ」ということが分かります。すなわち、ネットワークは「入力層-隠れ層」 「隠れ層-出力層」で構成されており、単純パーセプトロンと同様の層構造が2層並んでいるだけと見ることができます。人間の脳の中に張り巡らされている神経回路を「層構造」として考えることによって、新たに複雑な概念を持ち込まずともモデルを拡張できたわけです。

1.3 モデルの学習

隠れ層を追加した多層パーセプトロンによってモデルの表現力は向上しましたが、実際に適切な予測を行うにはモデルの学習が必要です。各層におけるニューロン間のつながりは重みで表されると前述しましたが、この重みをどのような値にすべきかを求めなくてはなりません。

ニューラルネットワークに限らず、あらゆる機械学習の手法にはデータを正しく予測するために最適化すべき値が存在します。ニューラルネットワークにおいては重みの値が代表例となりますが、こうした学習によって求める値のことをモデルのパラメータと呼びます。モデルの学習とは、このパラメータを何かしらの最適化手法・計算によって求めることを指します。モデルが複雑になるほど求めるべきモデルのパラメータ数も増えるため、より計算に時間がかかることになります。

また、モデルによっては最適化手法・計算では求めることができず、実際にいくつかの値を試して予測結果を比較するまでは何が一番良いのか分からない値も存在します。このような、モデルの構造や振る舞いを決めるものの、最適化計算で求めることができない値のことをパラメータに対しハイパーパラメータと呼ばれます。例えばニューラルネットワークでは「隠れ層のニューロン数をいくつにすべきか」はハイパーパラメータの代表例になります。

では、どのようにパラメータを求めればよいのでしょうか。これは機械学習のモデルによって手法が異なりますが、ひとまず共通して言えることは「モデルの予測値と実際の値を一致させる」必要があるということです。予測誤差の値がモデルの予測性能を表すというのは3章の3-22.1予測誤差」でも言及しました。 ニューラルネットワークでは、この予測誤差を誤差関数、すなわち関数として捉え、「誤差関数を最小化する」というアプローチを取ります。「予測を一致させる」という目的を、関数の最小化問題という数学の問題に落とし込んだわけです。これにより具体的に最適化計算を行うことができるようになり、適切な予測ができるような重み(などのパラメータ)が求まることになります。具体的にどのような誤差関数を用いてどのような計算を行うのかについては4-2 「誤差関数」以降で詳しく見ていくことにします。誤差関数は損失関数と呼ぶこともあります。

1.4 ディープラーニングの基本

ニューラルネットワークの原点として、単純パーセプトロン (もしくはロジスティック回帰) という隠れ層がないモデルがありました。これは入力層・出力層のみからなるシンプルな構造であるために、線形分類問題しか解くことができないという欠点がありました。一方、多層パーセプトロンはここに隠れ層を追加することによって、非線形分類問題にも対応することができるようになりました。 ここからさらに隠れ層を増やしたらどうなるでしょうか。隠れ層を1つ追加するだけで非線形分類ができるようになったのですから、さらに隠れ層を追加していけば、より複雑な問題を解くことができるようになりそうです。 その考えはあながち間違いではありません。とても簡単に言ってしまうと、ディープラーニングとは、隠れ層を増やした二ューラルネットワークなのです。ディープラーニングは深層学習とも言いますが、これはニューラルネットワークの層が多い、すなわち層が「深い」ためです。では、図4.3の概要図を見てみましょう。

図4.3

ただし、あくまでもこれはディープラーニングの基本形です。実際はただ深層にするだけでは期待した成果は得られず、いくつもの課題が立ちふさがりました。そして、これらの課題を克服するために様々な手法・工夫が考えられ、実践されました。ディープラーニングとは、いくつもの工夫が積み重なってできたニューラルネットワークと言えるでしょう。

また、現在はこの基本形以外にも様々なモデルが考えられており、ネットワークの形も様々です(詳しくは5章以降で見て

いきます)。ニューラルネットワークはもともと人間の脳の構造を参考にして考えられた手法ですが、そこから解きたい課題の種類に応じて、工学的に様々なアプローチが考えられ、様々なモデルが考えられることとなりました。

いずれにせよ、まず基本となるのは隠れ層を増やしたニューラルネットワークです。機械学習にはニューラルネットワーク以外にも色々な手法がありますが、あくまでもディープラーニングはニューラルネットワークを応用した手法である、ということに注意してください。ただし、ディープラーニングはあくまでも機械学習と同じように人工知能の研究分野を指すものですので、ニューラルネットワークのモデル自体はディープニューラルネットワークと呼ぶことが大半です。

1.5 ハードウェアの制約と進歩

■ 半導体の性能 ディープラーニングで実践された「隠れ層を増やす」というアイデアですが、このアイデア自体は非常にシンプルなものですし、誰でもすぐに思いつきそうなものです。一体なぜ、今頃になってディープラーニングが大きな成果を上げるようになったのでしょうか。大きな理由のひとつとして、昔はディープラーニングのモデルを学習するのに必要な計算量に耐えられるだけのコンピュータがなかった、ということが挙げられます。ディープラーニングを考えるうえでは切っても切れない関係にあるのがハードウェアの制約と進歩です。

Intel社の創設者の1人であるゴードン・ムーアが提唱した「半導体の性能と集積は、18ヶ月ごとに2倍になる」という経験則、通称ムーアの法則(図4.4)は、今でこそ限界を迎えてきたと言われていますが、逆に言うと、これまで凄まじい勢いでコンピュータの性能が進化してきたことを示しています。

図4.4

現在は基本的なディープニューラルネットワークならば誰でも手軽に試せるようになりましたが、ひと昔前のコンピュータでは、仮に「深層にしよう(隠れを増やそう)」というアイデアを思いついたとしても、モデルの学習・評価に必要な計算コストが高すぎてなかなり実験することができなかったというのが現実です。唇を増やせばそれだけモデルのパラメータ数も増えることになりますし。最適化計算に必要なデータ数もそれに比例して限えることになります。ディープラーニングには大な計算量がつきものですが、コンピュータの演算処理装置は高密度な半導体チップですので、まさしく半導体の性能・集積が鍵を握ることになります。

■ CPUとGPU コンピュータにはCPU(Central Processing Unit) &GPU (Graphics Processing Unit) の2つの出算処理装置があり、 両者は異なる役割を担っていますが、とりわけ、ディープラーニングの開発に大きく貢献しているのはGPUです。それぞれ、 どういったものなのかを見ていきましょう。

CPUはコンピュータ全般の作業を処理する役割を担います。普段、私たちはパソコンやスマートフォンでメールをしたり、楽を聴いたり、SNSに写真をアップしたり、動画を見たりと様々なことを行っています。こうした日常の操作をストレスなく快適に行えるのは、コンピュータがメールの送受信や音楽の再生といったタスクを次々にこなしてくれているからに他なりません。CPUはこうした様々な種類のタスクを順番に処理していくことに長けています。

一方、GPUは"graphics"という名前が表している通り、画像処理に関する演算を願います。映像や3DCGなどを処理する場合は、同一画像に同じ演算を一手に行うことが求められますので、大規模な並列注意选用が必要になります。この処理はCPU でもできなくはないのですが、CPUは様々なタスクを順序よくこなすものですので、あまり効率的ではありません。そこで、

大規模な並列演算処理に特化した存在としてGPUが作られたのです。注意してもらいたいのが、GPUのほうがCPUより「優れている」というわけではないという点です。GPUはCPUのように様々なタスクをこなすことができません。決められた処理を行うからこそ、大規模かつ高速に演算することができるのです。

■ GPGPU ディープラーニングではテンソル (行列やベクトル)による計算が主になりますから、同じような計算処理が大規模で行われることになります。これはまさしくGPUにうってつけです。ただし、もともとのGPUは画像処理に最適化されたものですから、そのままではディープラーニングの計算には適していませんでした。

現在では、GPUは画像以外の計算にも使えるように改良され、もはやGPUなしでは学習できない(学習しようとしても何週間、何ヶ月とかかってしまう) ような巨大なネットワークが当たり前のように試されています。こうした、画像以外の目的での使用に最適化されたGPUのことを、GPGPU (General-Purpose computing on GPU) と呼びます。

このディープラーニング向けのGPU (GPGPU) の開発をリードしているのが米国の半導体メーカーである NVIDIA社です。ディープラーニング実装用のライブラリのほぼ全てがNVIDIA社製のGPU上での計算をサポートしており、ディープラーニングのモデル学習になくてはならないものになっています。

一方、Apple社やMicrosoft社といったNVIDIA社以外の企業も、独自にディープラーニング向けのチップを開発しています。特にGoogle社は早くから独自のチップ開発を進めており、TPU (Tensor Processing Unit) という名前で公開しています。その名の通りテンソル計算処理に最適化されており、まさしく機械学習に特化した演算処理装置と言えます。

1.6 ディープラーニングのデータ量

ディープラーニングも機械学習の1つですから、データをもとに学習をするというステップを踏むことに変わりありません。学習とはすなわちモデルがもつパラメータの最適化というわけですが、ディープニューラルネットワークは、ネットワークが深くなればなるほどその最適化すべきパラメータ数も増えていきますので、必要な計算量も増えていきます。

例えば、畳み込みニューラルネットワーク (詳しくは5章で扱います)の手法の1つであるAlexNet (アレックスネット)と呼ばれるモデルのパラメータ数は、約6000万個にもなります。これだけの数のパラメータを最適化しなくてはならないわけですから、膨大なデータ数が必要になるだろうことは想像に難くありません。では、実際にはどれだけのデータが必要になるのでしょうか。

実は、ディープラーニングだけに限らず、機械学習のモデル全般に言えることとして、「この問題にはこれだけのデータがあればよい」という明確に決まった数字は(残念ながら) ありません。扱う問題が単純、すなわちノイズもなくキレイに分類できるようならば少ないデータ量でも済むでしょうが、そんなケースは稀でしょう。問題が複雑であればあるほど必要なデー夕量も増えていくことになります。しかし、問題の「複雑さ」に絶対的な基準はありませんので、必然的に必要なデータ量も定まらないということになるわけです。

ただし、データ量の目安となる経験則は存在します。バーニーおじさんのルールと呼ばれるこの経験則は、「モデルのパラメータ数の10倍のデータ数が必要」というものです。これに従うと、先ほどのAlexNetでは必要なデータ数が約6億個ということになります。ただし、この数のデータを用意するというのは全くもって現実的ではないので、データ数が少なくても済むようなテクニックが適用されることになります。

とは言うものの、データ数が少なすぎる場合はさすがにディープラーニングの学習はできません。データ数が数百個にも満たない場合は、データを集めるところから考えるべきです。あるいは、ディープラーニング以外のアプローチで解くことができないかを考えてみるのもよいでしょう。

4-2.誤差関数

ディープラーニングのモデルの学習には、予測誤差を関数で表した誤差関数を最小化するアプローチを取ります。この頃差関数は、扱う問題によって異なります。ここでは代表的な誤差関数をいくつか見ていくことにします。

1.平均二乗誤差関数

モデルの予測性能の評価に用いられた平均二乗誤差ですが、これはもちろんそのまま汎関数としても用いられ、平均二重誤差関数と呼びます。訓練データを用いてこの関数を最小化するモデルの予測値と正解値との誤差(の2乗の平均値)が小さくなるということなので、平均二乗の龄小化を考えることがモデルの予測性能の向上につながる。ということは直感的にも分かりやすいかと思います。

予測値はモデルのパラメータの値によって決まるので、誤差問数における変数は各モデルのパラメータということになります。よって、関数の最小化、すなわち遊適化問題を移くには、誤問数をそれぞれのパラメータで微分(偏微分) してゼロになるような値を求めればよいことになります。

文章で読むと難しく見えるかもしれませんが、例えばxの関数$f(x)=x^2$が最小となるようなの値を求めよという問題だったらどうでしょうか。$f(x)$の微分$f'(x)=2x$を求め、これがゼロになるような値「x=0」を答えとして求めたと思います(このとき$f(0)=0$が最小値)。この問題よりかは関数も複雑になりますし、求めるべき値も増えますが、やるべきことは同じです。「誤差関数の最小化のために微分してゼロになるような値を求める」という流れに違いはありません。これは強のあらゆる誤差関数に関して言えることです。

平均二乗誤差関数は予測誤差をそのまま表していると言っても良い関数ですので、予測性能の評価のときと同様、分類問題・回帰問題にかかわらず用いることができます。ただし、分類問題では別の誤差関数が用いられることも多く、実際は回帰問題の誤差関数として用いられることが大半です。

2.交差エントロピー誤差関数

交差エントロピー (cross entropy) は2つの確率分布がどれくらい異なるかを定式化したもので、これを誤差関数として利用したのが交差エントロピー誤差関数です。分類問題で最も用いられる誤差関数になります。

分類問題において、ニューラルネットワークの最後の出力層部分でシグモイド関数あるいはソフトマックス関数を活性化関数として用いると、モデルの各クラスの予測値 (出力) は0から1の確率として表現できます。正解値と予測値をそれぞれ確率分布として捉えると、2つの分布が一致するときに最小値をとるような関数も、予測誤差を適切に表す関数であると言えます。

なぜ分類問題では平均二乗誤差関数ではなく交差エントロピー誤差関数が用いられるのでしょうか。これは誤差関数の最小化計算に伴う微分計算において、交差エントロピーの式がシグモイド関数やソフトマックス関数に含まれる指数計算と相性が良いことが大きな理由のひとつです。

参考のために交差エントロピーの式を見てみましょう。正解値の確率分布をp、予測値の確率分布をとすると、交差エントロピーH (p,q)は次式で与えられます。

$$ H(p, q) = -\Sigma_xp(x)\log q(x) $$

交差エントロピーでは対数計算が含まれていることが分かりますが、指数・対数の微分ではいずれも指数計算が出てくるので計算が行いやすくなります。

今でこそモデルの実装を行う際、機械が代わりに微分計算をしてくれるので数式を意識する機会は少なくなりましたが、以前は自分で微分式を計算し、その数式を自らコードに書き換える必要がありました。なので、数式が簡単にまとまるかどうか・計算が簡単にできるかどうかはかなり重要だったわけです。

逆に言うと、今は式の複雑さは重要ではなくなったので、例えば手計算が交差エントロピー誤差関数に比べ煩雑になってしまう平均二乗誤差関数を分類問題に用いるような実装をしても何も問題はありません。

3.その他の誤差関数

3.1 距離学習における誤差

世の中には様々な問題が存在し、場合によっては回帰問題・分類問題の枠組みに当てはまらないケースも多く存在します。 機械学習・深層学習ではそうした問題にも対処できるように、入力・出力データを工夫したり、誤差関数を工夫したりすることで解決を図ってきました。

例えば距離学習(metric learning) は、文字通りデータ間の「距離」を割るためのアプローチです。「距離」と聞くとイメージしづらいかもしれませんが、要はデータ間の類似度を推定するための手法で、顔認証や類似データの検索など様々な分野距離学習自体はディープラーニング以前から存在していた手法ですが、これをディープラーニングに応用した手法を深層距離学習(deep metric learning)と呼びます。

深層距離学習ではSiamese NetworkTriplet Networkが有名で、それぞれ入力が2つのデータを用いるか、3つのデータを用いるかの違いがあります。そして前者ではContrastive Loss、後者ではTriplet Lossと呼ぶ関数を用います。いずれも数式は複雑になってしまうので愛しますが、各人力に対するモデルの出力値問での距離を考え、似ているデー夕間の距離は小さく、似ていないデータの距離は大きくなるような設計となっています。ここで大事なのは、課題がどういう内容であろうとも、その課題を解決するような誤差数をうまく定義することができれば、あとは数学的・工学的なアプロ一チで解くことができるということです。

3.2 生成モデルにおける誤差

機械学習はもともと識別問題を解くことを得意としていましたが、ディープラーニングの発展によって、画像や文章などを生成する生成問題も精度高く実現できるようになりました(詳しくは6章の「6.5 データ生成」で扱います)。データの生成を行うための生成モデルが目指すのは、与えられたデータをうまく分けることができる境界線を見つけることではなく、与えられたデータがどのような確率分布に基づいているかを見つけることです。つまり。生成モデルは「今できているデータはなんらかの確率分布に基づいて生成されているはずだ」という考えに基づいて、そのデータを生成している確率分布をモデル化しようと試みていることになります。

データ分布になるべく近いモデル分布を求めることが目的になるわけですので、両者の分布の「ズレ」を誤差関数として定義すればよさそうです。この確率分布の「ズレ」を測る指標として用いられるのが、カルバック・ライブラー情報量(Kullback-Leibler divergence) とイェンゼン・シャノン情報量 (Jensen-Shannon divergence) になります。「情報量」 は英語のまま「ダイバージェンス」と表記することもあり、それぞれ KLダイバージェンスJSダイバージェンスと略記することもあります。

生成モデルにディープラーニングを活用したモデルを深層生成モデルと呼びますが、例えば深層生成モデルのひとつである変分オートエンコーダ (variational autoencoder, VAE)では、カルバック・ライブラー情報量をベースとした誤差関数(厳密には式変形などの過程で誤差を表すものではなくなるので、純粋に目的関数と言います)が最適化計算に用いられます。

4-3.正則化

本節では、過学習を防ぐための手法である正則化について見ていきます。なぜ過学習が起きてしまうのか、どのようにしてそれを解決したのかについて理解していきましょう。

1.誤差関数の改良

誤差関数を最小化することによってモデルの学習が行われ、適切な予測ができるようになると述べました。しかし、その過程で注意しなければならないのが過学習です。特にディープラーニングはモデルの表現力が高いので、何も工夫せずにそのままモデルの学習を行うと、表現しなくても良い訓練データに含まれるわずかなノイズまで表現するように学習してしまうケースが多く見受けられます。

ディープラーニングを含む機械学習の最大の敵であると言っても過言ではない過学習ですが、その対応策も色々と考えられており、総じて正則化 (regularization) と呼びます。訓練データへの過剰な当てはまりを抑制しつつ、より単純なモデルが当てはまるようにすることが求められます。どのような正則化手法があるのかを見ていきましょう。

正則化の中でも広く用いられる手法が誤差関数にペナルティ項を課すというものです。モデルの学習では訓練データを用いて誤差関数の最小化をする以上、訓練データを過学習してしまうのはどうしても避けられません。そこで、誤差関数に制約条件を課すことによって、モデルのパラメータが取り得る範囲を制限するのがこのアプローチです。有名な正則化にL1正則化L2正則化があります。名前に含まれるL1やL2は数学用語のノルムに対応しており、L1ノルムは重みなどモデルパラメータの各成分の絶対値の和、L2ノルムは各成分の2乗和の平方根なので距離に相当します。それぞれの特徴は下記のとおりになります。

他にも、ゼロではないパラメータの数で正則化するLO正則化もありますが、計算コストが非常に大きくなる場合が多いので、一般的に用いられることはほぼありません。

また参考までに、線形回帰に対してL1正則化を適用した手法をラッソ回帰L2正則化を適用した手法をリッジ回帰と呼びます。両者を組み合わせた手法をElastic Netと呼びます。

2. ドロップアウト

表現力が高く過学習しやすいディープニューラルネットワークにおいては、L1正則化やL2正則化以外にも正則化の手法が存在します。ドロップアウトと呼ばれる手法は、モデルの学習の行い方を工夫することで過学習を防ぐアプローチで、名前の通り学習の際にランダムにニューロンを「除外する」ものです。このときネットワークから、学習のエポックごとに除外するニューロンを変えることで、毎回形の異なるネットワークで学習を行います。 除外されたドロップアウトを適用したニューラルネットワークの例は 図4.5のとおりです。×印がついているニューロンが除外されたニューロンです。学習のエポックごとにランダムに除外するニューロンを選ぶことで、学習全体ではパラメータの値が調整されることになります。


図4.5


単一のネットワークで学習をする場合、それが過学習してしまうようにパラメータが調整されてしまうとどうしようもありませんが、形の異なるネットワークを学習すれば、そのリスクを回避することができます。つまり、ドロップアウトは内部的にアンサンブル学習を行っていることになります。

4-4.最適化手法

本節では、ディープニューラルネットワークの学習に用いられるアルゴリズムである勾配降下法について扱います。モデルのパラメータ最適化を行ううえでどういったことを考慮しなくてはならないのか、どのように学習を効率化するのかなどについて見ていきます。

1.勾配降下法

モデルの学習とは、誤差関数 (あるいは何かしらの目的関数)の最小化を目指すことでした。関数の最小化問題であるため、誤差関数を各層の重みなどモデルのパラメータで微分してゼロになるような値を求めればよいわけなのですが、実はここで問題が生じます。一般的にニューラルネットワークで解こうとするような問題は入力の次元が多次元にわたるので、最適なパラメータが解析計算では求まらない、すなわち簡単には求まらないケースがほとんどなのです。

そこで、実際のモデルの学習では、解析的に解を求めにいくのではなく、アルゴリズムを用いて最適解を探索する、というアプローチを取ります。ここで用いる手法のことを勾配降下法 (gradient descent)と呼びます。勾配降下法は機械学習に限らず様々な分野において最適化計算に用いる手法で、名前の通り 「勾配に沿って降りていくことで解を探索する」手法です。 ここで言う勾配とは微分値に当たります。

例えば、xの関数$f(x)=x^2$とし、$y=f(x)$を$xy$平面上で考えてみると、微分は「接線の傾き」を表すので、微分値が勾配を表しているというのは直観的にも理解できるかと思います。勾配(接線の傾き)を坂道に見立て、その坂道に沿って降りていけば、いずれ平らな道に行き着くはずです。そして、その行き着いたところは傾きがゼロ、すなわち微分値がゼロの点なわけですから、まさしく目的の点が得られることになります。図で表すと図4.6のようになりますが、式で表すと次のように書くことができます。

$$ x^{(k+1)} = x^{(k)} - \alpha f'\left(x^{(k)}\right) \quad (\alpha > 0) $$

式中の$k$はこの式を何回繰り返し計算したかを示すもので、イテレーションと呼ばれます。目的の$x$が得られるまで勾配に沿って降りていくので、一度だけ式を計算すれば良いわけではなく、最適解に行き着くまで何度もこの式を計算することになります。また、$\alpha$は学習率と呼ばれるハイパーパラメータで、「勾配に沿って一度にどれだけ降りていくか」を決めるものになります。


図4.6


2.バッチ勾配降下法

ニューラルネットワークの学習に勾配降下法を適用する場合、更新式には目的関数の微分が用いられているので、誤差関数の微分を用いて更新式を計算していくことになります。訓練データを用いて誤差関数の微分値を計算し、勾配降下法の更新式を適用していくわけですが、複数ある訓練データに対して、どのタイミングで更新式の計算をすれば良いのでしょうか?

例えば、勾配降下法の更新式の項を計算すると、訓練データの予測誤差をすべて計算し、その合計値を利用して勾配降下法の更新式の計算をすることになります(実際の計算式は複雑になるので割愛します)。すなわち、下記のような流れで学習が進むことになります。

全データの誤差を計算→更新式を計算→ (更新されたパラメータを用いて) 全データの誤差を計算→更新式を計算→………

このように(理論通りに) 全データの予測誤差の総和を用いて更新式の計算をすることをバッチ勾配降下法と言います。バッチ (batch) とはデータの固まりを表し、一回の更新計算にすべてのデータを用いるためこのような名前が付いています。 ただし、単に「勾配降下法」と書く場合はこのバッチ勾配降下法を指すことが一般的です。バッチを用いて学習を行うので、 バッチ勾配降下法による学習のことをバッチ学習と言います。また、バッチ勾配降下法は最急降下法と呼ぶこともあります。

3.確率的勾配降下法

理論的にはバッチ勾配降下法できちんと最適解の探索ができるのですが、ディープラーニングの学習においては問題が生じる場合があります。特に発生しやすい問題としては、「扱うデータ数が大きい・扱うデータの次元数が大きいために、全データの誤差を計算するためのメモリが足りなくなる」というものです。これもハードウェアの制約と言えるでしょう。

そこで、全データの誤差を計算してから更新式の計算をするのではなく、「訓練データをシャッフルしたうえでデータをひとつランダムに抽出、そのデータの予測誤差だけを用いて更新式を計算する」というアプローチを取ることがあります。これならばひとつのデータ (の誤差計算) 分しかメモリは必要なくなるので、メモリが足りなくなるという心配はないです。このアプローチのことを確率的勾配降下法と呼びます。確率的勾配降下法を用いた学習を、バッチ学習に対しオンライン学習と呼びます。

データひとつひとつで更新式を計算するので、1回の更新できちんと正しい方向 (最適解に近づく方向)に探索が進むかは分かりませんが、たくさん更新計算を繰り返すことによって最適解を目指すことになります。また、ニューラルネットワークの学習では、基本的に全データをシャッフルした後、ひとつひとつのデータを結局すべて更新計算に用いることが大半です。

例えば全データ数が1000だったとき、バッチ学習では1000個のデータの誤差計算をしてから更新計算を1回行いますが、 オンライン学習では1個のデータの誤差を用いた更新計算を1000回行うことになります。いずれも結局は全てのデータを用いているわけですが、オンライン学習では全データを1回使うまでのイテレーション数が多くなることになります。

そして、バッチ学習で更新計算を何度も行い最適解を探索するのと同様、オンライン学習でも全データを(ひとつずつ) 何度も更新計算に用います。そこで、全データを用いる回数をエポックと呼び、イテレーションと区別します。先ほどの例では、オンライン学習では1エポック=1000イテレーションになります。バッチ学習ではエポック数とイテレーション数は一致することになります。

4. ミニバッチ勾配降下法

バッチ勾配降下法,確率的勾配降下法いずれも一長一短ありますが、両者のちょうど間をとった手法がミニバッチ勾配降下法になります。確率的勾配降下法ではデータひとつごとに更新計算を行いましたが、ミニバッチ勾配降下法では全データをいくつかのデータセットに分割し、そのデータセットごとに更新計算を行います。バッチは全データを指しましたが、それをいくつかの小さいデータセットに分割するのでミニバッチと言うわけです。また、各データセット内のデータ数のことをバッチサイズと言います。

ミニバッチ勾配降下法は実際の学習で最もよく使われる手法で、バッチ勾配降下法のように全データ分のメモリを確保する必要もないのでメモリ不足にもなりにくいですし、確率的勾配降下法のようにデータによって探索方向がばらつくといったことも起こりにくいという利点があります。ミニバッチ勾配降下法を用いた学習のことをミニバッチ学習と呼びます。

ミニバッチ学習におけるバッチサイズ、エポック、イテレーションについて確認しておきましょう。先ほどと同様、全デー夕数が1000のときを考えてみます。例えば各データセット内のデータ数を50とすると、これはそのままバッチサイズになるので、バッチサイズは50となります。このとき全データは20のデータセットに分割されますが、ミニバッチ学習はこの各データセットごとに更新計算を行っていくので、イテレーション数は20となり、1エポック=20イテレーションということが分かります。バッチサイズやエポックはハイパーパラメータになります。

5.勾配降下法の問題と改善

5.1 学習率の調整

勾配降下法によって最適解の探索ができるようになりましたが、実は探索がいつもうまくいくとは限りません。適切な最適解が得られないケースが多々あります。例えば、図4.7のような形をした関数があったとしましょう。勾配がゼロになる点が ★と☆の2つあります。この2点のうち、★の点が最小値を取るので最適解なわけですが、もし●から勾配に沿って探索をしてしまうと、☆の点に行き着いてしまいそうです。勾配降下法の式上は、勾配がゼロの点に行き着くことが目的になっているので、☆の点でもまた良しとなってしまうのです。つまり、勾配降下法は「見せかけの最適解であるかどうかを見抜くことができません。この見せかけの解 (☆) のことを局所最適解、本当の最適解のことを大域最適解と言います。特に何も工夫をしないと、勾配降下法は局所最適解に陥ってしまう可能性が高くなります。


図4.7


では、局所最適解を防ぐ方法として、どのようなアプローチがあり得るでしょうか。まず考えられるのは、学習率の値を大きく設定することです。学習率は、勾配に沿ってどれくらい進むかを調整するものでした。ということは、☆の点とその左にある山を越えるくらい学習率を大きくすれば、大域最適解に行き着くことができそうです。一方、学習率が大きいままだと、 最適解を飛び越えて探索し続けてしまうという問題が起こりやすくなってしまうので、適切なタイミングで学習率の値を小さくしていくことが必要になります。

さらに別の問題も存在します。図4.7は2次元上で考えましたが、3次元(以上)ではより厄介な点に行き着いてしまう可能性があるのです。

鞍点(あんてん)と呼ばれるその点は、ある次元から見れば極小であるものの、別の次元から見ると極大となってしまっているもののことを言います。図4.8 における点 (●) が鞍点の例です。鞍点は一般的に勾配の小さな平坦な地点に囲まれている場合が多いので、一度鞍点付近に陥ると、そこから抜け出すことは困難になります(こうした停留状態にあることをプラトーと言います)。


図4.8


ディープラーニングではパラメータの次元も大きいので、鞍点が発生する確率が高くなります。鞍点(そして局所最適解) に陥ってしまう問題を回避するには、どの方向に沿って勾配を進んでいるときに学習率を大きく(あるいは小さく) すべきかを考える必要があります。

実は、ディープラーニングが考えられる以前に、この鞍点問題にどう対処すべきかについては考えられていました。1990 年代に提唱されたモーメンタムと呼ばれる手法は、まさしく物理でいう慣性の考え方を適用したもので、最適化の進行方向に学習を加速させることで、学習の停滞を防ぐものです。

そして、ディープラーニングのブームを受けて、モーメンタムよりさらに効率的な手法が立て続けに考えられました。古いものからAdagradAdadeltaRMSpropAdamAdaBoundAMSBoundなどがあります。アルゴリズムの詳細はもちろんそれぞれ異なりますが、いずれも土台となっているのはモーメンタムと同じで、どの方向に学習を加速すればいいか(そして学習を収束させるか)を考えたものになります。基本的には新しい手法ほどより効率化が進んでいるため、よく用いられる傾向があります。

5.2 早期終了(early stopping)

勾配降下法による最適化において、学習率の調整以外にもうひとつ厄介な問題があります。それは過学習です。「4-3正則化」でも言及しましたが、過度に最適解の探索をすることは過学習につながります。正則化によってある程度は過学習を避け、モデルの汎化能力を高めることはできますが、やはり訓練データを用いて誤差関数を最小化するアプローチしか取れない以上、どう工夫しても過学習していってしまうのは避けられません。 実際、訓練データ、テストデータに対する誤差関数の値をそれぞれエポックごとに見てみると、ほとんどの場合で、訓練データに対する値はエポックが進むにつれ徐々に小さくなっていきますが、テストデータに対する値は、ある程度エポックが進むと緩やかに大きくなっていってしまいます。これはすなわち、訓練データには最適化されていっているが、テストデータには最適化されていない状態になっているので、過学習していることを表しています。

そこで用いられる手法が早期終了(early stopping)です。名前の通り、学習を早めに打ち切るものです。先述した通り、 学習が進むにつれてテストデータに対する誤差関数の値は右肩上がりになってしまいます。その上がり始めが過学習のし始めと考え、その時点で学習を止めれば、そこが最適な解が得られたところと言えます。ですので、手法自体はいたってシンプルです。

シンプルこの上ない手法ですが、効果の面でも、どんなモデルにも適用できるという面でも、非常に強力であることは間違いありません。ジェフリー・ヒントンも、early stoppingのことを“Beautiful FREE LUNCH”と表現しています。これはノーフリーランチ定理という、「あらゆる問題で性能の良い汎用最適化戦略は理論上不可能」であることを示す定理を意識して発せられた言葉です。

ただし、最近の研究では、一度テストデータに対する誤差が増えた後、再度誤差が減っていくという二重降下現象(double descent phenomenon) も確認されており、どのタイミングで学習を止めれば良いのかについては慎重に検討しなくてはならない場合もあります。

6.ハイパーパラメータの探索

モデルのパラメータは勾配降下法によって最適化できるようになりましたが、どんなモデルを学習するにせよ、ハイパーパラメータは自分で設定しなければなりません。ニューラルネットワークを何層にするか、各層のニューロン数をいくつにするか、ドロップアウトはどれくらいにするか、LI正則化やL2正則化をどれくらい効かせるか・・・などなど、設定すべきハイパーパラメータを挙げればキリがありません。

幸い、これまでの研究・実験の積み重ねの知見が溜まっているため、ハイパーパラメータの値をどれくらいに設定すれば良いか、ある程度(最適ではないかもしれないが、大きく外れてはいない)は絞られてきます。ただし、きちんとハイパーパラメータも「最適化」したい場合は、様々な値で実験をして予測性能を比較するしかありません。このハイパーパラメータの値を調整していくことをハイパーパラメータチューニングと呼びます。

ただし、手動でいちいちハイパーパラメータの値を調整していてはこちらもまたキリがありませんので、ハイパーパラメータの探索も特定の方針にしたがって機械的に処理することが大半です。探索手法の代表例として、グリッドサーチランダムサーチがあります。

グリッドサーチは調整したい(複数の) ハイパーパラメータの値の候補を明示的にいくつか指定し、その候補の全ての組み合わせに対して学習・評価を行うことで、一番よいハイパーパラメータを抽出します。あくまでも手動で値の組み合わせを試す代わりに機械的に処理するようにしただけなので、ある程度ハイパーパラメータの値が絞られている時に用いられることが多いです。また、単純に組み合わせの数だけ学習時間が増えることに注意が必要です。

ランダムサーチは値の候補そのものを指定するのではなく、値の取り得る範囲を指定します。その範囲の中で何かしらの確率分布に基づいた乱数を発生させ、その乱数をハイパーパラメータとして実験を行います。ハイパーパラメータの値に見当が付いていない場合も、取り得る値の範囲を広めにとっておけばある程度探索できるのが特徴です。

他にもベイズ最適化遺伝的アルゴリズムといった手法を用いてハイパーパラメータ最適化を目指すアプローチもありますが、パラメータの最適化と同様、探索に時間がかかってしまうのが難点です。

4-5.誤差逆伝播法

本節では、ディープニューラルネットワークの学習を効率よく行うための手法である誤差逆伝播法について扱います。実際にモデルの学習を行う上で欠かせない手法になりますので、しっかりと理解するようにしましょう。

1.誤差逆伝播法の導入

最適化計算に用いられる勾配降下法ですが、ディープである・ないにかかわらず、更新式をそのままニューラルネットワークの学習に実装して適用しようとすると、いくつか問題が生じます。まず挙げられるのが計算コストの問題です。

勾配降下法の更新式はパラメータごとに計算するので、ネットワークが深くなればなるほど、探索すべきパラメータの数は膨大になっていきます。また、更新式に誤差関数をパラメータで微分した式が出てきましたが、この微分式 (あるいは微分値)をそれぞれのパラメータに対し求めることも当然ながら容易ではありません。そのため、理論的にはどんなニューラルネットワークも学習することはできるのですが、実際にきちんと学習できるようにするには困難が伴いました。

そこで、複数のパラメータに対して微分を効率よく求めるために考えられたのが誤差逆伝播法(backpropagation) です。 誤差逆伝播法では、ネットワークの各層において、その層に伝播してきた値には自分より前の層 (入力層に近い層) のパラメータの値が含まれている(計算に使われている)ことに着目し、微分計算を再利用することを考えます。そのために、合成関数の微分あるいは連鎖律と呼ばれる微分の公式を用います。

簡単な例で合成関数の微分を確認してみましょう。$z$が$y$の関数で、さらに$y$が$x$の関数であるとき、$z$を$x$で微分した式は以下になります。

$$ \frac{dz}{dx} = \frac{dz}{dy} \cdot \frac{dy}{dx} $$

この式を覚える必要はありませんが、ここで大事なのは、微分において「変数を中継」することができるということです。 これを応用すれば、一度微分値を求めた部分についてはその計算を再利用できるので、計算コストを削減することにつながりそうです。

ニューラルネットワークにおいては、最終層に含まれるパラメータで誤差関数の微分を計算するのが一番容易なので(出力値を得るまでに伝播式を1回しか計算しないため)、出力層側からネットワークを遡って微分計算を順番に行っていくのが最も効率よい計算方法になります。ここで大事なのは、前述した通り、各層に伝播してきた値には自分より前の層のパラメータの値が含まれている、ということです。他の層のパラメータの関数にもなっているからこそ、連鎖律を用いることができるためです。

「誤差逆伝播法」という名前は、この計算の流れが、あたかも 「予測誤差がネットワークを逆向きにたどっているように見える」ために付けられた名前です。予測値を求めるまではネットワークを順向きに、学習ではその予測誤差をネットワークを逆向きにフィードバックする形でパラメータの値が更新されていきます。話が複雑になってしまいましたが、要約すると、「勾配降下法を用いてニューラルネットワークの学習をする際に、微分計算を誤差逆伝播法を用いて効率よく行う」ということになります。


図4.9


2.誤差逆伝搬法の副次的効果

誤差逆伝播法の導入によるメリットは計算の効率化だけでなく、どのニューロンが予測結果に寄与している・していないかを判別できるようになったことも挙げられます。各勾配値が逆伝播の過程で求められるので、どのニューロンをどれだけ更新すれば予測結果に影響あるのかが実験できるようになったためです。これは機械学習においてよく指摘される「モデルのどの部分がその予測結果をもたらしているのかが分からない」という信用割当問題 (credit assignment problem) を解決できているとも言えます。ただし、あくまでもこれはモデルの「どこ」が予測結果に影響しているかだけであり、「なぜ」その予測結果が得られるのかについては関係ないことに注意してください。

誤差逆伝播法の導入により効率よくニューラルネットワークの学習を行うことができるようになり、モデルを多層化することも容易になりました。これにより新たに出てきた問題が勾配消失問題勾配爆発問題です。名前の通り誤差を逆伝播する過程で勾配値が小さくなりすぎてしまう (消失)、あるいは大きくなりすぎてしまう (爆発) 問題のことで、いずれも勾配を用いた最適解の探索ができなくなってしまい、学習の失敗の要因となります。特に勾配消失問題はネットワークが深いほど生じやすく、ディープラーニングの発展を妨げてきましたが、現在では様々な手法を組み合わせることにより、これらの問題は発生しにくくなっています。

4-6.活性化関数

本節では、シグモイド関数やソフトマックス関数以外にどのような活性化関数が用いられているのか、またなぜ活性化関数がディープラーニングの学習に重要なのかについて見ていきます。

1.シグモイド関数と勾配消失問題

誤差逆伝播法によって出力層側から順番に隠れ層のパラメータを更新していく際、数式上では前の層 (出力層に近い層)の誤差情報にいくつかの項が掛け合わされた形で勾配値を計算します。その項の1つに「活性化関数の微分」があるのですが、 この項の式の構造がディープラーニングを実装するうえで勾配消失問題を発生させる大きな原因となりました。

ニューラルネットワークの活性化関数としてシグモイド関数が使われていましたが、これを微分した関数 (導関数)は図 4.10のようになります。図からも分かるように、シグモイド関数の微分は最大値が0.25にしかなりません。これは1よりもだいぶ小さいですから、隠れ層を遡るごとに、(活性化関数の微分が掛け合わさって) 伝播していく誤差はどんどん小さくなっていくことになります。その結果、多くの隠れ層があると、入力層付近の隠れ層に到達するまでには、もはやフィードバックすべき誤差がほとんど0になってしまい、勾配消失問題が発生するというわけです。


図4.10


理論的には、隠れ層を増やすとより複雑な関数を作ることができ、より複雑な問題でも予測できるはずなので、ディープラーニングの実現に向けてはこの勾配消失問題を解決する必要がありました。

2.tanh関数

勾配消失問題はディープラーニングの実現に向けて大きな妨げとなりますが、原因はシグモイド関数の微分にあると分かっているので、ここを何とかできれば解決することができそうです。ディープラーニングの黎明期では学習のステップを工夫することでこの問題の解決に臨みましたが、現在は活性化関数にシグモイド関数以外を用いることで勾配消失問題を防いでいます。

ここで大事なこととしては、出力層ではシグモイド関数 (またはソフトマックス関数)を用いなければ出力を確率で表現することができないので、もはやこれらの関数を変えることはできません。一方、出力を得る前の隠れ層に関しては、その値が確率の表現になっていようがいまいが関係ないので、任意の実数を (非線形に) 変換することができる関数でさえあれば、とんな関数であろうと活性化関数として用いるのに特に問題はないということです。活性化関数が微分できないと誤差逆伝播法を用いることができないので、効率的に重みを求めるには任意の実数で微分できなくてはなりませんが、それ以外の制約は実は特にないのです。

隠れ層の活性化関数を工夫するというアイデアは、第3次AIブームの前から実践されていました。その中でもよい結果が得られたのがtanh (ハイパボリックタンジェント) 関数です。図4.11 で表されるこの関数は、シグモイド関数を線形変換したもので、シグモイド関数が0から1の範囲をとるのに対して、tanh関数は-1から1の範囲をとるのが特徴です。


図4.11


シグモイド関数の微分とtanh関数の微分を比較したものが図4.12です。シグモイド関数の微分の最大値が0.25であったのに対して、tanh関数の微分の最大値は1であるので、勾配が消失しにくくなることが分かるかと思います。ですので、 なディープニューラルネットワークの隠れ層の活性化関数にシグモイド関数が使われている場合、それはすべてtanh関数に置き換えたほうがよいことになります。

tanh関数はディープラーニングのブームにより活性化関数が再研究されるまで、最も有用な活性化関数であったと言うことができるでしょう。ただし、この関数も、シグモイド関数よりは高い精度が出やすいものの、あくまでも微分の“最大値”が1 であり、1より小さい数になってしまうケースがほぼ全てですので、ディープネットワークでは、勾配消失問題を完全に防げてはいません。


図4.12


3.ReLU関数

tanh関数よりも勾配消失問題に対処できるのがReLU (Rectified Linear Unit) 関数と呼ばれるもので、図で表すと図 4.13のようになります。もはやシグモイド関数やtanh関数とは全く異なった形をしていますが、式自体はと非 y = max(0, x) 常にシンプルです。


図4.13


ReLU関数を微分すると図4.14のようになりますから、が0より大きい限り、微分値は常に最大値である1が得られることになります。tanh関数のようにピーク値のみが1のときと比較すると、誤差逆伝播の際に勾配が小さくなりにくい(勾配消失しにくい)ことが分かります。実際、ReLUを活性化関数に用いることによって、ディープニューラルネットワーク全体をそのまま効果的に学習できる場合が多くなりました。ただし、図からも分かる通り、が0以下の場合は微分値も0になりますから、学習がうまくいかない場合もあるということには注意が必要です。


図4.14


ReLU関数は、既存の活性化関数と比べて劇的に精度の向上に貢献したため、様々な派生系も考えられました。その中の1つとして、Leaky ReLU関数が挙げられます。グラフは図4.15の通りで、ReLU関数との違いは、$x<0$においてわずかな傾きをもっているという点です。これにより、微分値が0になることはなくなりますから、ReLUよりも勾配消失しにくい、すなわちよりよい精度が出やすい活性化関数として期待されました。しかし実際は、精度が出るときもあれば、ReLUのほうがよい場合もあり、Leaky ReLUのほうが必ず「よい」活性化関数であるとは言い切れないことには注意が必要です。

他にも、このLeaky ReLUの部分の直線の傾きを学習によって最適化しようというParametric ReLUや、複数の傾きをランダムに試す Randomized ReLUなどがありますが、どれが一番いいか、というのは一概には言うことはできません。


図4.15


章末問題

問題1

ディープラーニングの説明として、最も不適切なものを1つ選べ。

  1. ニューラルネットワークの隠れ層を深くしたものである。
  2. 他の多くのアルゴリズムと比べて一般的に計算量は少なくて済む。
  3. 非線形の回帰や分類を行うことができる。
  4. 過学習に陥る可能性がある。

📝 解答

2

🔍 解説

ディープラーニングの基本理解を問う問題です。ディープラーニングはさまざまな問題に適用できる一方、過学習することや計算量が必要なことなど、メリット・デメリットを理解しましょう。


問題2

勾配消失問題の対策として、最も不適切なものを1つ選べ。

  1. ReLU等の活性化関数を使用する。
  2. バッチ正規化を行う。
  3. スキップ結合をネットワークに組み込む。
  4. ドロップアウトを行う。

📝 解答

4

🔍 解説

勾配消失問題についての理解を問う問題です。勾配消失問題の対策として活性化関数にReLU等を利用したり、スキップ結合を組み込んだりすることが有効です。ドロップアウトは過学習を抑制するのに効果的です。


問題3

以下の文章を読み、空欄に最もよく当てはまるものを1つ選べ。 単純パーセプトロンでは非線形分類を行うことはできないが、() と呼ばれる層を加えた多層パーセプトロンを用いることで非線形分類は可能となる。

  1. 隠れ層
  2. プーリング層
  3. 活性化層
  4. スキップ層

📝 解答

1

🔍 解説

多層パーセプトロンについての理解を問う問題です。多層パーセプトロンは隠れ層を多層にした構造です。


問題4

誤差逆伝播法に関する説明として、最も適切なものを1つ選べ。

  1. 誤差逆伝播法で、誤差を出力層から入力層へフィードバックさせるときに勾配が小さくなりすぎる問題は過学習と呼ばれる。
  2. 勾配消失問題を回避するため、ディープニューラルネットワークをより深くするのが有効である。
  3. 勾配消失問題を回避するには、適切な活性化関数を選ぶ必要がある。
  4. 誤差逆伝播法は、複数回の積分操作によって実現される。

📝 解答

3

🔍 解説

誤差逆伝播法についての理解を問う問題です。誤差逆伝播法により学習する際、勾配消失問題は対策すべき重要な問題なので、対策方法を理解しましょう。


問題5

ディープラーニングの膨大な計算量を処理する演算装置に関する説明として、最も不適切なものを1つ選べ。

  1. GPUは画像に関する並列演算処理を得意としており、言語認識や音声のモデルにはCPUを用いる。
  2. CPUは様々なタスクを順序よくこなすことを得意としており、大規模な並列演算の効率的な処理は得意でない。
  3. ディープラーニング実装用のライブラリのほぼ全てがNVIDIA社製のGPU上での計算をサポートしている。
  4. Google社はテンソル計算処理に最適化されたTPUと呼ばれる演算処理装置を開発している。

📝 解答

1

🔍 解説

GPUについての理解を問う問題です。GPUは、ディープラーニングを学習する上で重要なハードウェアです。どのような特長があるか理解しましょう。


問題6

畳み込みニューラルネットワーク (CNN) を用いた学習を行う際、必要なデータについて述べたものとして、最も適切なものを1つ選べ。

  1. 学習に必要なデータが不足していると思われる場合、データ拡張を行い、不足するデータ量を補うことがある。
  2. バーニーおじさんのルール 「モデルのパラメータ数の10倍のデータ数が必要」は厳守すべきである。
  3. 同じパラメータ数のモデルを学習する場合は、必ず同じデータ数にしなければならない。
  4. ビッグデータは学習に必要である多様な特徴を含んでいるため、加工せずそのまま用いるべきである。

📝 解答

1

🔍 解説

畳み込みニューラルネットワークについての理解を問う問題です。学習には膨大なデータを用いますが、どのように準備するか理解しましょう。


問題7

以下の説明に当てはまる活性化関数として、最も適切なものを1つ選べ。

多層ニューラルネットワークの学習における勾配消失問題とは、出力層から誤差を伝播する過程で勾配が減衰してしまい、 入力層に近い層の重み成分の学習が進まなくなってしまう現象である。この勾配消失問題に対しては、関数への入力値が0以下の場合には出力値が0となり、入力値が0より大きい場合には、出力値として入力値と同じ値となる活性化関数を適用することが有効であると言われている。

  1. シグモイド関数
  2. ReLU関数
  3. ステップ関数
  4. ソフトマックス関数

📝 解答

2

🔍 解説

活性化関数についての理解を問う問題です。ReLU関数を含めた各活性化関数の特長を理解しましょう。


問題8

以下の文章を読み、空欄に最もよく当てはまるものを1つ選べ。

どんな値を入力しても0から1の間に変換されるため、最終的に確率を出力する際に有用な活性化関数は () である。

  1. tanh関数
  2. シグモイド関数
  3. ReLU関数
  4. ステップ関数

📝 解答

2

🔍 解説

活性化関数についての理解を問う問題です。シグモイド関数は0から1の値に変換します。tanh関数は-1から1の間に範囲が限定されますが、ReLU関数は0以上の値、ステップ関数は0または1の値に変換します。


問題9

テストデータの一部が訓練データに紛れ込んだ場合に起こり得る問題として、最も適切なものを1つ選べ。

  1. モデルの性能が不当に高く評価される。
  2. モデルの性能が不当に低く評価される。
  3. 学習時間が増大する。
  4. 特に問題は生じない。

📝 解答

1

🔍 解説

学習時に気をつけることを問う問題です。訓練データとテストデータが重複しないようにデータを分割しないといけません。もし重複した場合に起こりうる問題を理解しましょう。


問題10

勾配降下法において、誤差関数を最小化する際には学習データを用いて計算を行い、それによりパラメータを更新することを繰り返す。その更新の各回を表す語句として、最も適切なものを1つ選べ。

  1. カーネル
  2. パディング
  3. ストライド
  4. イテレーション

📝 解答

4

🔍 解説

学習方法についての理解を問う問題です。イテレーションと共にエポックなどの語句を理解しましょう。カーネルやパディング、ストライドは畳み込み層に関連する語句です。


問題11

勾配降下法などを用いてモデルを訓練する場合、オンライン学習、バッチ学習、ミニバッチ学習の3者の関係を記述する上で、最も適切なものを1つ選べ。ただし、全訓練データ数をNとする。

  1. オンライン学習では、パラメータ更新時に用いられるデータ数が1であり、バッチ学習ではN、ミニバッチ学習では$n < N$である。
  2. オンライン学習では、パラメータ更新時に用いられるデータ数がNであり、バッチ学習では1、ミニバッチ学習では$n < N$である。
  3. オンライン学習では、パラメータ更新時に用いられるデータ数がNであり、バッチ学習では$n<N$、ミニバッチ学習では1である。
  4. オンライン学習では、パラメータ更新時に用いられるデータ数がNであり、バッチ学習では1、ミニバッチ学習では$n < N$である。

📝 解答

1

🔍 解説

学習方法についての理解を問う問題です。オンライン学習、バッチ学習、ミニバッチ学習の違いを理解しましょう。


問題12

ディープラーニングに限らず、機械学習の手法ではハイパーパラメータの地道なチューニングが必要になる。ハイパーパラメータの説明として、最も適切なものを1つ選べ。

  1. モデルに含まれるパラメータの中で最も値が大きいパラメータである。
  2. モデルの学習の過程で決定されないパラメータである。
  3. 別の学習済みモデルから再利用されたパラメータである。
  4. 前処理の際にのみ必要となるパラメータである。

📝 解答

2

🔍 解説

学習方法についての理解を問う問題です。学習には人があらかじめ決めておくハイパーパラメータが存在します。ハイパーパラメータは学習で自動的に 決められるものではありません。


問題13

以下の文章を読み、空欄に最もよく当てはまるものを1つ選べ。

( ) は2つの確率分布の差を表す尺度である。誤差関数として利用する場合、学習中のモデルの予測が、正解データと一致する割合が高いほど ( ) の値は0に近づき、低いほど大きな値をとる。

  1. 交差エントロピー
  2. 結合エントロピー
  3. 部分エントロピー
  4. 情報エントロピー

📝 解答

1

🔍 解説

誤差関数についての理解を問う問題です。ディープラーニングを適用する問題によって適切な誤差関数を選べるよう、それぞれの特徴を理解しましょう。また、選択肢2や選択肢3は存在しない誤差関数であり、選択肢4も誤差関数には利用しません。


問題14

確率的勾配降下法の説明として、最も適切なものを1つ選べ。

  1. ニュートン法と同じ計算手法である。
  2. ベイズの確率により勾配を求める手法である。
  3. 学習データごとに勾配を求めて修正量を出し、逐次更新する手法である。
  4. 固定の関数を微分した関数に学習データを代入し、勾配を求める手法である。

📝 解答

3

🔍 解説

学習方法についての理解を問う問題です。確率的勾配降下法は、勾配を求めて繰り返しパラメータを更新する手法です。


問題15

ノーフリーランチの定理が示す内容として、最も適切なものを1つ選べ。

  1. 未知の入力に対して常に良好な結果を出力するモデルは実現可能である。
  2. モデルの次元数が増えるにつれて必要なデータは指数関数的に増加する。
  3. 競合する複数の仮説があるとき、もっとも単純な仮説を選ぶべきである。
  4. あらゆる問題で性能の良い汎用最適化戦略は、理論上存在しない。

📝 解答

4

🔍 解説

学習方法についての理解を問う問題です。どんな問題でも通用するような学習プロセスは存在しないので、問題に応じて試行錯誤する必要があります。


問題16

以下の文章を読み、空欄 (A) (B) に最もよく当てはまるものを1つ選べ。

(A) は誤差関数が増加し始めた段階で学習を停止する手法である。誤差関数が増加に転じた後、再び減少する (B) が起こりうるため、学習を停止するタイミングについては慎重な検討が必要な場合がある。

  1. (A) ドロップアウト (B) 二重降下現象
  2. (A) ドロップアウト (B)勾配停留現象
  3. (A) 早期終了 (B) 二重降下現象
  4. (A) 早期終了 (B) 勾配停留現象

📝 解答

3

🔍 解説

学習方法についての理解を問う問題です。二重降下現象のように学習の繰り返し回数を多く設定しておかないと分からない現象もあります。


問題17

ディープラーニングにおいて過学習を防ぐ方法としてドロップアウトがある。ドロップアウトの説明として、最も適切なものを1つ選べ。

  1. 学習の繰り返しごとに、確率的に特定のニューロンを予測に用いない手法である。
  2. 過学習を避けるために学習を早く打ち切る手法である。
  3. 層が深くなっても誤差が伝播しやすくするため、層を飛び越えた結合を設ける手法である。
  4. ペナルティ項を付加することで、重みの値の範囲を制限する手法である。

📝 解答

1

🔍 解説

ドロップアウトについての理解を問う問題です。ドロップアウトはランダムに選択したニューロンの値を0にすることで予測に用いません。選択される ニューロンはエポックごとに変更します。