機械学習の真の姿とはどのようなものか

Last Edited: 7/10/2024

このブログはこれまでの機械学習の経験について振り返るために書いたものです。

ML

ウィキペディアによると、機械学習の定義は次の通りです:

機械学習(きかいがくしゅう、英: machine learning)とは、経験からの学習により自動で改善するコンピューターアルゴリズムもしくはその研究領域で、 人工知能の一種であるとみなされている。

少し抽象的で難しいのでより簡単で具体的に表現してみました。(完璧ではないかもしれませんが、簡略化のために):

機械学習とは、既存のデータと学習アルゴリズムを使用して、データのパターンを見つけたり、未知のデータに対して予測を行ったりすること。

上記の説明で少しは機械学習がどんなものかがわかったでしょうか。まだ理解できていない場合でも心配しないでください。 この記事では、機械学習の最もシンプルなパイプラインの例を通じて、機械学習が実際にどのようなものかを説明していきたいと思います。

注釈: ここで説明するパイプラインはすべての機械学習パイプラインに当てはまるものではありません。 基本的な機械学習の理解を促すためのものです。

機械学習パイプライン

ステップ 1. データ探索

繰り返しになりますが、機械学習は既存のデータと学習アルゴリズムを使用して、データのパターンを見つけたり、未知のデータに対して予測を行ったりすることです。 したがって、まずは学習したいパターンや予測を行いたい対象のデータを探す必要があります。たとえば、人々が勉強に費やす時間とテストで受ける得点の関係を学習し、 そのテストに合格するために必要な勉強時間を予測したいとします。その場合、最初のステップは適切なデータを探し、そのデータを観察することです。

あなたは学校がテストの結果とアンケート結果の記録をコンピュータシステムで管理していることを知りました。記録を調べるため学校に話をしてみると、 データを送ってもらうことに成功しました。(この学校のデータ管理は杜撰なようです。)最初のステップはこのデータを観察することです。では、早速みてみましょう。

テストAに関する調査結果
学籍番号テストの点数 (0-100)勉強時間 (0-24)睡眠時間 (0-24)
000132NANA
0002902111
00031216
000460128
00053677
0006609.57.5
00072434
000875NANA
00098623.511
001014NANA
0011901910
001295199
001390112
001480165

データには不必要な情報や欠損値が含まれていることが分かります。これは重要な観察結果です。では、データを可視化するためにプロットしてみましょう。

プロットすることで、1人が一般的な傾向に従っていないことが分かります。これは外れ値と呼ばれます。この学生は天才かもしれませんし、嘘をついているかもしれませんが、 いずれにせよ、これも重要な観察です。

ステップ 2. データの前処理

データには不必要な情報や欠損値、外れ値が含まれていることが分かりました。このステップでは、これらを適切に処理して後続のアルゴリズムで正確な分析が行えるようにします。 ここでは、単純化のためにそれらをすべて取り除いてしまいましょう。このステップをデータクリーニングと呼びます。データクリーニングの後、データは以下のようになります。

データクリーニング後のデータ
テストの点数 (0-100)勉強時間 (0-24)
9021
121
6012
367
609.5
243
8623.5
9019
9519
8016

次のステップでは、このデータをコンピュータによって実行されるある種の学習アルゴリズムに渡します。しかし、コンピュータは通常、 0から100、0から24までのような異なる変数間で数値のスケールが異なることを好みません(これは必ずしも真実ではありませんが、 一旦の理解のためとお考えください)。ですので、すべての数値をそれぞれの最大値である100と24で割って、数値のスケールを0から1に変換しましょう。 このプロセスを正規化と呼びます。

正規化後のデータ
テストの点数 (0-1)勉強時間 (0-1)
0.900.88
0.120.04
0.600.50
0.360.29
0.600.40
0.240.13
0.860.98
0.900.79
0.950.79
0.800.67

次に、データを訓練データとテストデータに分割する必要があります。これにより、未知のデータに対する予測の精度を評価することができます。 したがって、機械学習を行う際には訓練データのみを使用します。

訓練データ
テストの点数 (0-1)勉強時間 (0-1)
0.900.88
0.120.04
0.600.50
0.600.40
0.240.13
0.860.98
0.900.79
テストデータ
テストの点数 (0-1)勉強時間 (0-1)
0.360.29
0.950.79
0.800.67

今やっと、次のステップに進む準備が整いました。この準備に関わる全体のプロセスはデータ前処理と呼ばれ、データの準備に最適な手法は、 分析するデータの種類(画像、テキスト、ビデオ、音声など)や使用しようとしている機械に依存します。

ステップ 3. モデル

ここでみなさんお待ちかねの機械学習モデルの構築に移ります!以下のようなモデルを作成しましょう。

y=f(x,ϕ)f(x,ϕ)=ϕ1x+ϕ2 y = f(x, \phi) \\ f(x, \phi) = \phi_1 x + \phi_{2}

ここで、 xx は勉強時間、yy はテストの点数、ff は関数(線形)、ϕ\phiはパラメータ (傾き(ϕ1\phi_1) と切片(ϕ2\phi_2))です。 このステップでは、関数がテストの得点を最もよく予測できるような 最適なパラメータを見つけることが目標です。どのようにしてそれを行うのでしょうか?

コスト関数

まず、最適なパラメータとは何を意味するかを定量化する必要があります。この場合だと、 最適なパラメータは訓練データに最もよく適合する直線のパラメータなので、パラメータによって生まれる直線の適合度を測れば良いでしょう。 そのために使用できるのが平均二乗誤差(MSE)です。以下はMSEの計算方法です:

MSE=i=1n(yif(xi,ϕ))2n MSE = \frac{\sum_{i=1}^{n}(y_i-f(x_i, \phi))^2}{n}

これは複雑に見えるかもしれませんが、実際にはそうではありません。これは実際のテストの得点と予測されたテストの得点の差の二乗の平均です。 差を二乗することですべての値を正にします。MSEを最小化するパラメータを見つけることができれば、最適なパラメータを見つけたと言えます。 訓練データへの適合度を評価するために使用する関数はコスト/損失関数と呼ばれます。

コスト関数の最小化

もし以前に微分積分を学んだことがあれば、関数の局所最小値を見つけるためには、導関数を取ってそれを0に設定すれば良いことを覚えているかもしれません。 ここではその方法を利用して、コストが最小となるパラメータを導きます。具体的には、ここではコスト関数をϕ1\phi_1ϕ2\phi_2で偏微分し、それらを0に設定して方程式を解くことで、 コストが最小化されるϕ1\phi_1ϕ2\phi_2を導きます。

まず、MSEを展開して偏微分しやすくします。

MSE=1ni=1n(yi(ϕ1xi+ϕ2))2=1ni=1n(ϕ1xi+(yiϕ2))2=1ni=1n(ϕ12xi22ϕ1xi(yiϕ2)+(yiϕ2)2)=1ni=1n(ϕ12xi22ϕ1xiyi+2ϕ1xiϕ2+yi22yiϕ2+ϕ22) MSE = \frac{1}{n}\sum_{i=1}^{n}(y_i-(\phi_1x_i+\phi_2))^2 \\ = \frac{1}{n}\sum_{i=1}^{n}(-\phi_1x_i+(y_i-\phi_2))^2 \\ = \frac{1}{n}\sum_{i=1}^{n}(\phi_1^2x_i^2-2\phi_1x_i(y_i-\phi_2)+(y_i-\phi_2)^2) \\ = \frac{1}{n}\sum_{i=1}^{n}(\phi_1^2x_i^2-2\phi_1x_iy_i \\ +2\phi_1x_i\phi_2+y_i^2-2y_i\phi_2+\phi_2^2)

ではMSEをϕ1\phi_1で偏微分しましょう。

MSEϕ1=1ni=1n(2xi2ϕ12xiyi+2xiϕ2)\frac{\partial MSE}{\partial \phi_1} = \frac{1}{n}\sum_{i=1}^{n}(2x_i^2\phi_1-2x_iy_i+2x_i\phi_2)

次にMSEをϕ2\phi_2で偏微分しましょう。

MSEϕ2=1ni=1n(2ϕ1xi2yi+2ϕ2)\frac{\partial MSE}{\partial \phi_2} = \frac{1}{n}\sum_{i=1}^{n}(2\phi_1x_i-2y_i+2\phi_2)

では、偏微分の結果を0に設定して方程式を構築しましょう。ϕ1\phi_1の場合:

1ni=1n(2xi2ϕ12xiyi+2xiϕ2)=0i=1n(xi2ϕ1xiyi+xiϕ2)=0ϕ1=i=1nxiyixiϕ2xi2\frac{1}{n}\sum_{i=1}^{n}(2x_i^2\phi_1-2x_iy_i+2x_i\phi_2) = 0 \\ \sum_{i=1}^{n}(x_i^2\phi_1-x_iy_i+x_i\phi_2) = 0 \\ \phi_1 = \sum_{i=1}^{n}\frac{x_iy_i-x_i\phi_2}{x_i^2}

ϕ2\phi_2の場合:

1ni=1n(2ϕ1xi2yi+2ϕ2)=0i=1n(ϕ1xiyi+ϕ2)=0ϕ2=i=1nyiϕ1xi\frac{1}{n}\sum_{i=1}^{n}(2\phi_1x_i-2y_i+2\phi_2) = 0 \\ \sum_{i=1}^{n}(\phi_1x_i-y_i+\phi_2) = 0 \\ \phi_2 = \sum_{i=1}^{n}{y_i-\phi_1x_i}

このまま方程式を解くことができますが、長くなるのでカットします。データ数が少ない場合や関数が複雑な場合でない場合は 容易に方程式を解けますが、そうでない場合方程式を解くことは困難になります。そのため、機械学習エンジニアは、 コストが最小に近づくパラメータを見つけるための巧妙な別の手法を開発してきました。それはさておき、 これが、数学を活用して機械に最適なパラメータを学習させる方法の一つです。

機械学習モデルとは何か

関数の集合、パラメータ、コスト関数、学習メカニズムのセットを合わせて機械学習モデルと呼びます。 上記の例は線形回帰モデルと呼ばれる機械学習モデルです。このシナリオでは、ϕ\phiをモデルの唯一のパラメータと見なしましたが、 実際には関数も最適化するためのモデルが学習できるパラメータと見なすことができます。例えば、MSEに基づいて線形、 二次、多変量関数の中から関数を選択することのできるモデルを開発することもできます。後で学ぶように、モデルの多くの構成要素は、 コスト関数やその他の関数に基づいて自動的に最適化できるパラメータになり得ます。

ステップ 4. モデルの評価

さて、機械学習のパイプラインに戻りましょう。ステップ2でデータを訓練データとテストデータに分割し、 ステップ3では訓練データのみを使用したことを覚えていますか? このステップでは、使われていなかったテストデータを使用して モデルが未知のデータでどのように機能するかを真に評価します。モデルによる予測の品質を測定する指標をメトリクスと呼びます。 ここでは、単純化のために平均絶対誤差(MAE)をメトリクスとして使用しましょう(二乗値の代わりに絶対値を取ります)。

MAE=i=1n(yif(xi,ϕ))n MAE = \frac{\sum_{i=1}^{n}|(y_i-f(x_i, \phi))|}{n}

素晴らしいですね。これを"モデルは未知のデータにおいて平均しておおよそ±\pmMAEの誤差の範囲内で予測することができる"と解釈することができます。 タスクに応じて様々なメトリクスがあり、その中から適切なものを選ばなければなりません。(例えば、速度も考慮したい場合もあります) 世界中の機械学習エンジニアたちは、これらの適切なメトリクスで最高の結果を出す方法を競い合っているというわけです。

機械学習における研究課題

上記は機械学習パイプラインの最もシンプルな例ですが、同様のパイプラインがさまざまなタスクやデータ(自然言語処理、コンピュータビジョン、音声処理など) で広く使用されています。このパイプラインからは自然に多くの研究課題が生まれます。例えば以下のようなものです:

  • ステップ 1: データの収集と取り扱いにおける最も倫理的なアプローチは何か?
  • ステップ 1: データを最良に可視化または表現する方法は何か?
  • ステップ 2: 無効なデータ、欠損値、外れ値を最も適切に処理する方法は何か?
  • ステップ 2: モデルに最も適したデータの準備方法は何か?
  • ステップ 3: 異なるタスクに対して最適なffをどのように選択するか?
  • ステップ 3: 異なるタスクに対して最適なコスト関数をどのように選択するか?
  • ステップ 3: 学習メカニズムをどのように最適に設計するか?
  • ステップ 4: 異なるタスクに対してモデルの性能を最良に測定する方法は何か?

機械学習の分野はこれらの問いに対するより良い答えを求めて急速に進化しています。たとえば、畳み込みニューラルネットワーク、 LSTM、Transformerなどの洗練された機械学習モデルも、上記の研究課題の追求のために驚くほど巧妙に設計されたffにすぎません。 このブログ投稿シリーズでは、研究者たちがこれらの課題にどのように取り組み、どのような知恵を獲得してきたかを紹介したいと思います。