
機械学習モデルの分類と種類
機械学習モデルとは、さまざまな入力データから導かれる出力データのパターンを学習し、新しい入力データから対応する出力データを予測・分類・生成したりするためのアルゴリズムや、その方法のことである。以下のような種類に分類される。
監督学習モデル
①回帰モデル
- 線形回帰(Linear Regression)
入力データと出力データの間の「線形関係」を学習するモデル。例えば住宅価格の予測などで、住宅の面積(入力)に対して、価格(出力)が直線的に増加すると仮定した場合に、このモデルが使われる。 - ロジスティック回帰(Logistic Regression)
直線的な問題のクラス分類のためのモデル。特定の連続値を区分する場合にも使われるが、実際には二項分類(Yes/Noなど)によく使われる。線形回帰を基にしており、ロジスティック関数(シグモイド関数)を使用して確率を予測する。 - リッジ回帰(Ridge Regression)
線形回帰にL2正則化を加えたモデルで、過学習を防ぐ。複雑なデータセットにおける予測や、多重共線性のあるデータセットでの回帰分析に用いられる。
②分類モデル
- 決定木(Decision Trees)
非線形な問題に使われ、データを条件に従って分岐させていくことで、予測や分類を行うモデル。各ノードは特徴量を基にした質問を表し、各分岐はその質問に対する回答を表す。最終的に到達するノード(リーフ)が予測結果を表すことから、シンプルで解釈しやすいのが特徴。 - ランダムフォレスト(Random Forest)
複数の決定木を組み合わせて予測精度を向上させたモデル。各決定木は、異なるサブセットのデータを使用して独立に学習され、最終的な予測はこれらの決定木の多数決(分類)や平均(回帰)によって決定される。安定性と精度の高さが特徴で、小規模データセットでも高い性能を発揮する。 - サポートベクターマシン(Support Vector Machines, SVM)
クラス分類のためのモデルで、高次元の特徴空間でデータを分離する「境界(ハイパープレーン)」を見つけるモデル。SVMの目的は、クラス間の境界とそこから最も近いデータポイント(サポートベクター)との距離(マージン)を最大化することである。マージンが長いとそれだけ誤判定の確率が減ることから、分類精度を高く、少数のサンプルでも高性能な分類が可能となる。 - ニューラルネットワーク(Neural Network; NN)
直訳で「神経網」という名前の通り、生物の脳の構造と機能を模倣した計算モデルで、特に複雑なデータや非線形な関係を学習する能力が高い。多数の「ノード(ニューロン)」が幾層にも重なりあう構造をしており、入力データがそれらの層を通過することでパターンを学習する。
予測や分類、生成などのタスクを実行することができ、その柔軟性から多くの応用が可能となる。例えば画像認識、自然言語処理、音声認識など、人工知能(AI)や機械学習の分野で優れた性能を発揮する。 - 深層学習(ディープラーニング:Deep Learning)
ニューラルネットワークのなかでも、特に多層のネットワークを持つものを指す。深層学習は、大量のデータを使って高度なパターンを学習することができる。
非監督学習モデル
- クラスタリング(Clustering)
データを自然なグループに分ける方法。データセットを似た特性を持つグループ(クラスター)に分割し、データの内部構造を見つける。例えば、指定された数のクラスターに分割する「K-meansクラスタリング(K-means Clustering)」や、データポイントを階層的にグループ化する「階層クラスタリング(Hierarchical Clustering)」、データの密度に基づいてクラスターを形成する「DBSCAN(Density-Based Spatial Clustering of Applications with Noise)」などがある。
K-meansは各データポイントを最も近いクラスターの中心(セントロイド)に割り当て、階層クラスタリングは個別のクラスターから段階的に結合していく「凝集型」と、一つのクラスターから分割していく「分割型」がある。DBSCANは低密度のノイズポイントを除外する。 - 次元削減(Dimensionality Reduction)
データの高次元空間を低次元空間に変換する手法で、データの可視化や計算効率の向上が図れる。データを分散が最大化する方向(高次元→低次元)に投影することで、データの次元を削減する「主成分分析(PCA, Principal Component Analysis)」や、高次元データを低次元空間に埋め込む「t-SNE(t-Distributed Stochastic Neighbor Embedding)」がある。
主成分分析で得られる各主成分とは、元のデータの特徴を最もよく表す直交ベクトル(互いに直角を成すベクトル)であり、t-SNEはデータの局所構造を保持することから、データの可視化に適している。 - アソシエーションルール(Association Rule Learning)
データ内の関連性やパターンを見つけるための手法で、特にマーケットバスケット分析で使われ、商品の購買パターンを分析する。頻繁に一緒に現れるアイテムセットを見つけるための「アプリオリアルゴリズム(Apriori Algorithm)」や、その改良版である「Eclat(Equivalence Class Clustering and bottom-up Lattice Traversal)」がある。
ニューラルネットワークの原理
ここではもっとも汎用性の高いモデルである「ニューラルネットワーク」を例として、機械学習モデルの動作原理を見ていく。
基本構造
- 入力層(Input Layer)
データがモデルに入力される層。例えば、画像のピクセルデータやテキストの単語ベクトルがここに入る。 - 隠れ層(Hidden Layers)
入力層からの情報を処理する層で、1つ以上の層が存在する。各層は複数の「ノード(ニューロン)」と呼ばれる単位から構成され、これらのノードは他のノードと結びついており、それぞれ異なる重みとバイアスを持っている。隠れ層の数やノードの数はモデルの複雑さに応じて調整される。
例えば画像認識タスクでは、入力データは画像の特徴(エッジやパターン)を抽出する「畳み込み層(Convolutional Layer)」を通って、それらの特徴を集約してデータの次元を減らす「プーリング層(Pooling Layer)」を通って、最後に重みとバイアスを使って最終的な判定を行う「全結合層(Fully Connected Layer)」を通ってから、その結果が次の出力層に送られる。 - 出力層(Output Layer)
処理された情報の結果がここで得られる。例えば画像分類タスクであれば、各クラス(猫、犬など)の確率が出力される。各クラスの出力層の数値が高いほど、そのクラスである可能性が高いと判定される。
学習プロセス
- 初期化
パラメータ(重みとバイアス)がランダムに初期化される。ここで決まったパラメータが学習のスタート地点となる。 - フォワードプロパゲーション(Forward Propagation)
入力データが順に各層を通過し、各層でデータはパラメータを使って変換され、最終的な出力が得られる。各隠れ層と出力層ではまず、入力されたデータ全ての「加重和(線形結合)」を計算し、続いてそれに「アクティベーション関数(非線形性を導入する関数)」を適用してから出力する。 - 損失関数(Loss Function)
モデルの予測と実際のラベル(正解)との誤差(損失)を計算する。この誤差が小さいほど、モデルの性能が良いことを示す。 - バックプロパゲーション(Backpropagation)
誤差を最小化するために、各ノードのパラメータ(重みとバイアス)を逆方向に更新(逆伝播)する。これは勾配降下法(Gradient Descent)などのアルゴリズムを使って行われる。 - 更新
現時点で誤差が小さい方にパラメータが更新され、このプロセスが繰り返し行われることで、モデルがデータのパターンを学習し、最終的には最適なパラメータを見つけることができる。
つまり機械学習モデルの「学習」とは、適当なパラメータからスタートしてどんどんデータの値を変換していき、正解であるラベルとの誤差が最小になるパラメータを見つける作業と言え、トレーニングが完了して最適なパラメータが見つかった後は、同じデータが与えられたときには常に対応する最適なパラメータが使われことになる。
これによりトレーニングを完了したモデルは一貫性(再現性)を持つようになり、必ず同じ入力に対しては同じ出力を得ることになる。この特性を利用して新しいデータを予測・分類したり、それを逆手にとって新しいデータを生成したりすることが、「学習済みモデル」の仕事である。
簡単な計算例
ある学習済みのニューラルネットワークに新しいデータ X を与えたとき、そのモデルはどのようにしてデータを解析するのだろうか? その仕組みを理解するために、以下に大まかな作用機序を記す。
前提条件
- 2次元ベクトルの入力データ(X): [x1, x2]
- 重み(W): [w1, w2]
- バイアス(b): b
- 隠れ層数:2
- 各層のノード(ニューロン)数:2
とすると、最初のレイヤー(隠れ層1)にある最初のノード(ノード1)では、まず次のように加重和 z1 を計算する。
\( z_{1}=\left( x_{1}\cdot w_{1}\right) +\left( x_{2}\cdot w_{2}\right) +b \)
さらにそれにアクティベーション関数 a = f(z) を適用して、出力 a1を得る。※なおアクティベーション関数の中身はモデルのネットワーク設計時に設定されたものが用いられる。
\( a_{1}=f\left( z_{1}\right) \)
続いて次のノード(ノード2)でも同じようにして加重和 z2 を求め、またそれをアクティベーションする。※ただし重み w とバイアス b は変わっていることに注意する。
\( z_{2}=\left( x_{1}\cdot w_{1}\right) +\left( x_{2}\cdot w_{2}\right) +b \)
\( a_{2}=f\left( z_{2}\right) \)
こうして得られた a1 と a2 が次のレイヤー(隠れ層2)に送られ、そこで同じように計算され別の a1 と a2 に変化し、いよいよ最後のレイヤー(出力層)に送られる。そこでも同様な加工が施され、待ちに待った最終結果(そのモデルの予測・分類) A = (A1 , A2) が出力される。
このようにしてニューラルネットワークモデルでは、入力データが「加重和(線形結合)→アクティベーション」を繰り返すことで変換されていき、最終的に得られた数値がコレに近ければコレ、アレに近ければアレ、と判定しているわけだ。つまり画像認識で犬や猫だと判定する基準も、本質的には数値であることが分かる。
理解を助ける関連知識の一覧
線形な問題と非線形な問題
- 線形な問題
変数間の関係が直線的な問題――つまり、入力と出力の関係がグラフ上で「直線」で表せる関数を指す。例えば「Y = aX + b」という関数は、グラフ上では a を傾き、 b を切片とした直線で表されるので、直線的な問題だと言える。
ここで Y と X が比例関係にある(線形性で結ばれている)ことから、仮に X をベクトル、 a をスカラーとして捉えた場合には、このような関数は「線形結合(Linear Combination)」という名前で呼ばれる。さらに a を重みとして捉えた場合には、「加重和 (Weighted Sum)」とも呼ばれる。
線形な問題は結果を解釈しやすく、計算も高速である。またモデルがシンプルであるため、トレーニングデータに過度にフィットする(過学習になる)リスクが少ない。 - 非線形な問題
変数間の関係が直線では表せない問題――つまり入力と出力の関係が「曲線」か、あるいは「複雑なパターン」で表される関数を指す。入力と出力の間に複数の層やフィードバックループがある場合が多く、複雑なデータパターンを捉える必要がある多くの実世界の問題に適している。
例えばニューラルネットワークを用いた画像認識では、画像のピクセル(入力)に対して、猫や犬といったカテゴリへの分類(出力)が行われるが、これは非線形な関係を理解しているからできる芸当だ。当然その計算コストは高くなる。
パラメータとハイパーパラメータ
- パラメータ(Parameters)
機械学習モデル(特にニューラルネットワークモデル)が学習する値のこと。具体的には、モデルが入力データに基づいて予測を行うための「重み」や「バイアス」のことを指す。これらのパラメータが調整されることで、モデルがデータのパターンを学習し、精度の高い予測ができるようになる。
モデル名に「〇〇B」と書かれている場合、そのモデルは○○億個のパラメータを持つことを意味し(B = Billions)、この数値が大きいモデルほど高性能であり、表現力が高く、より正確な予測や生成が可能となる。例えば、自然言語処理では長い文脈を理解したり、文の意味を正確に解析できるようになり、画像認識では、細部の特徴を捉えて高精度な分類が可能となる。また一つのモデルが複数の異なるタスクを効果的に処理できるようにもなる。
ただし、単純にパラメータを増やすだけでは過学習(overfitting)のリスクもあるため、データセットの質やモデルの正則化なども重要となる。 - ハイパーパラメータ(Hyperparameters)
モデルの学習プロセスやアーキテクチャを制御するパラメータで、トレーニングデータから直接学習される通常のパラメータ(重みとバイアス)とは違い、事前にオペレータにより設定される。ハイパーパラメータには、学習率(Learning Rate)、バッチサイズ(Batch Size)、エポック数(Epochs)、隠れ層の数(number of hidden layers)、ドロップアウト率(Dropout Rate)などが存在する。
後述する「検証」というプロセスでは、異なるハイパーパラメータ設定の性能を比較し、最も良い設定(各数値と組み合わせ)を見つけるということが、その目的の一つとなっている。最適なハイパーパラメータを選択することで、モデルが新しいデータに対しても高い精度を持つようになり、また過学習の防止にも繋がる。
重みとバイアス
どちらもニューラルネットワークの基本構成要素で、入力データから出力データを計算するために使われる。「重み(weight)」は入力データの重要性を調整する役割を持っており、モデルは入力データと重みを掛け合わせて、その結果を合計して次の層に渡すことになる。つまり重みが大きい場合、その入力データの影響が大きくなるのだ。
一方「バイアス(bias)」は、出力を調整するため追加する固定値のことで、モデルは入力データと重みの合計にバイアスを加えて、最終的な出力を計算することになる。バイアスがある意義は、入力データがゼロであっても一定の出力を得られることだ。
データポイントとデータセット
- データポイント
データセット内の個々のデータ(観測値やレコード)のこと。各データポイントは、特定の特性や属性を持つ個々のサンプルであり、機械学習モデルの学習に使用される基本単位である。構造としては一つ以上の「入力データ(属性:Features)」からなり、後述する監督学習のモデルでは、さらに「ラベル(Labels)」も追加される。前者が判定すべきデータ(画像認識タスクでは画像のピクセル値)、後者が予測すべき正解(画像認識タスクでは犬や猫など)となっている。 - データセット
機械学習モデルのトレーニングや評価に使用される、整理されたデータポイントの集合体。データセットはモデルの性能を評価するための基礎となり、モデルが学習すべきパターンや関係性を提供する。
種類としては、モデルの学習に使用される「トレーニングデータセット(Training Dataset)」や、学習の進捗を評価するために使用される「検証(バリデーション)データセット(Validation Dataset)」、モデルの最終的な性能評価に使用される「テストデータセット(Test Dataset)」に分けられる。
それぞれは役割によって分割されているだけで、持っているデータの種類としては同じである。その分割割合は任意でもいいが、一般的にはデータセットの80%をトレーニングデータセット、10%を検証データセット、残り10%をテストデータセットと分割することが多い。
監督学習と非監督学習
全てのデータセットにラベルが含まれる学習を「監督学習(Supervised Learning)」といい、逆にラベルを持たない学習を「非監督学習(Unsupervised Learning)」という。前者は画像認識やスパムメール分類などの学習で、後者はクラスタリングや異常検知などの学習で使用される。それぞれ「教師あり学習」「教師なし学習」とも呼ばれる。
回帰と分類
- 回帰(Regression)
連続する数値の予測を目的とした手法。回帰モデルは、入力変数と出力変数の間の関係を学習し、新しい入力に対し予測数値を出力する。例えば、家の面積や築年数から住宅価格を予測する場合や、過去の株価データや経済指標をもとに、将来の株価を予測する場合に使われる。 - 分類(Classification)
データを特定のカテゴリやクラスに分類することを目的とした手法。分類モデルは、入力データに基づいてラベル(クラス)を予測する。例えばメールの内容に基づいて、それがスパムメールかどうかを判定する場合や、画像を解析して、それが猫、犬、鳥などのどのカテゴリに属するかを判定する場合に使われる。
過学習と未学習
- 過学習(overfitting)
機械学習モデルの学習プロセスで、モデルがトレーニングデータに過剰に適合し(ノイズや詳細なパターンを覚えすぎた結果)、見たことのない新しいデータに対してはうまく機能しない状態。より分かりやすく言えば、同じトレーニングデータを繰り返し学習しすぎたあまり、本来のパラメータ選出とは無関係パターン(ノイズ)まで過剰に覚えてしまい、そのトレーニングデータ内では予測精度が非常に高くなっているが、新しいデータに対しては精度が相対的に著しく落ちている状態である。
これを防ぐことが、検証データセットを用いた「検証」を行う目的の一つである。と言うのも、過学習の兆候は「損失グラフ」を見ることで知ることができるからだ。「損失」とはモデルが導いた予測と、実際にデータが持ったラベル(正解)との誤差であることから、当然学習が進むにつれてトレーニングデータに対する損失は減少していく。この傾向は検証し始めにおいて、検証データに対しても同様に見られるが、あるポイントから一転して損失が増加し始めるようになる。これが過学習の兆候である。 - 未学習(underfitting)
過学習(オーバーフィット)とは逆に、トレーニングデータの量が不足している場合など、モデルが複雑さに欠け、データのパターンを充分に捉えられない状態を「未学習(アンダーフィット)」という。これを防ぐためには、単純にトレーニングデータを増やすだけでなく、より多くの層やノードを追加してモデルを複雑にする他、前述のハイパーパラメータを適切に調整することも有効だ。
正則化
正則化(Regularization)とは、過学習を防ぐためのテクニックの一つで、パラメータにペナルティを付加することで、学習の複雑さを制御し、モデルの汎用性を高める手法である。「L1正則化(Lasso回帰)」という手法では、パラメータの絶対値に対してペナルティを課すことで、一部のパラメータ(もともと数値が低いもの)をゼロにして、モデルをスパース(少数の重要な特徴のみを含む状態)にできる。
「L2正則化(Ridge回帰)」という手法では、パラメータの二乗に対してペナルティを課すことで、全てのパラメータを少しずつ小さくして、モデルの過学習を抑えることができる。これらが効果的である理由は、モデルが大きなパラメータほど強くフィット(重要な特徴だと認識)してしまうからだ。適切なフィットとはモデルがトレーニングデータの全体的なパターンを捉え、新しいデータに対しても良い予測を行える状態である。
それぞれのペナルティの数式は以下の通りである。
L1ペナルティ = \( \lambda \Sigma _{i}\left| w_{i}\right| \)
L2ペナルティ = \( \lambda \Sigma _{i}Wi^{2} \)
ここで λ は「正則化パラメータ」といい、正則化項の強さ(ペナルティ度合)を調整するハイパーパラメータである。これが大きくなると正則化の効果が強くなり、パラメータがより小さく抑えられることになる。一方 𝑤 は加工対象のパラメータである「重み(weight)」を表し、 ∑𝑖 𝑤𝑖 は全ての重みの総和を表す。
その他の過学習防止法
- ドロップアウト(Dropout)
学習中にランダムに一部のノード(ニューロン)を無効にすることで、モデルの過適合を防ぐ。これによりニューロン間の依存関係が減少し、モデルの汎化性能が向上する。 - 早期停止(Early Stopping)
トレーニング中に検証データセットの性能が向上しなくなった時点で学習を停止する。これにより過学習を防ぎ、モデルの最適な性能を維持できる。 - クロスバリデーション(Cross-Validation)
データを複数の部分に分割し、トレーニングと検証を繰り返してモデルの汎化性能を評価する。 - データ拡張(Data Augmentation)
トレーニングデータを増やすために、データを変換(例:画像の回転、切り取り、色調調整など)する手法。これにより、モデルが多様なデータに対しても適応できるようになる。
アクティベーション(活性化)関数
ニューラルネットワークにおいて、各ニューロンの出力に非線形性を導入し、最終的な出力を決定するための関数で、この関数を適用するプロセスを「アクティベーション(activation)」または「活性化」と呼ぶ。これによりニューロンの線形結合出力「Y = aX + b」を非線形「α = activation(z)」に変換し、ネットワーク全体が複雑なパターンを学習できるようにすることができる。
アクティベーション関数は以下のようなものがあり、一度ネットワーク設計時にこの関数を決定すると、以降の学習プロセスにおいて常にその関数が適用されるようになる。※なおアクティベーションにおいて以下の変数 𝑧 は全て、線形結合の結果 Y が入力されていることになる。
シグモイド関数(Sigmoid)
確率値の出力に適しているが、出力が 0 から 1 の範囲に圧縮されるため、後述する「勾配消失問題」が起きやすい。
\( \sigma \left( z\right) =\dfrac{1}{1+e^{-z}} \)
ハイパボリック・タンジェント関数(Tanh)
双曲線正接関数とも呼ばれ、ゼロ中心のデータに適している。出力が -1 から 1 の範囲に圧縮されるため、シグモンド関数と同じく勾配消失問題が起きやすい。
\( tanh\left( z\right) =\dfrac{e^{z}-e^{-z}}{e^{z}+e^{-z}} \)
ReLU(Rectified Linear Unit)
出力範囲 0 から無限大で、計算がシンプルで勾配消失問題が少ない。
\( ReLU\left( z\right) =\max \left( 0,z\right) \)
この関数は、入力が0より大きければその値を出力し、0以下であれば0を出力することから、もし学習中のパラメータ調整によってニューロンの重みが変化し、関数の入力値が負の範囲に入ってしまった場合には、常に0を返す(学習しなくなる)という欠点がある。このようにしてニューロンが全く更新されなくなった状態を「死んだニューロン」状態と呼ぶ。
Leaky ReLU
出力範囲負の無限大から正の無限大で、ReLUの欠点である「死んだニューロン」問題を軽減。
\( Leaky\:ReLU\left( z\right) =\begin{cases}z\:if\:z\geq 0\\ az\:if\:z <0\end{cases} \)
ソフトマックス関数(Softmax)
出力範囲 0 から 1 の間の値で、合計が1となる。マルチクラス分類に適している。
\( Softmax \left( z_{i}\right) =\dfrac{e^{z_{i}}}{\Sigma_{j}e^{z_{j}}} \)
コメント