
はじめに
こんにちは、イネイブリングGのnakamoriです。この記事はコインチェック株式会社(以下、コインチェック)のアドベントカレンダー18日目の記事です。 コインチェック - Qiita Advent Calendar 2025 - Qiita
Advanced Solutions Labとは
弊社のエンジニア数名でGoogleのAdvanced Solutions Labを受講しました。
Advanced Solutions Labは機械学習を学ぶためのトレーニングカリキュラムです。
今回我々は5日間にわたって機械学習の初学者向けのカリキュラムを受講しました。
内容は、機械学習の基本的な講義とJupyter Notebookによるハンズオンを繰り返し行いながら、VertexAI環境にて機械学習で何ができるか、どのように構築していくかを体験的に学んでいきました。
最終日には、講師の方に、「不正な取引を機械学習により検知する」という題材で、弊社の業務にカスタマイズした内容の課題やコンテンツを用意していただきました。これにより実践的でイメージのつきやすい機械学習の導入を体験することができました。
講義とハンズオン、どちらも非常にわかりやすい内容で大きな学びが得られました。
知っておくとよい数学のイメージ
講義やハンズオンは高度な数学の知識がなくても大体わかるようには設計されていました。
ただ、ところどころにちょっとした数学の記述は出てきます。これらが大まかにどのような意味を持つかを掴んでおくと、より楽しみながら理解できると感じました。
今回、「ざっくりこのような事前知識やイメージがあると理解の助けになる」と個人的に感じたことを簡略的に書いていきます。
モノを数値で表現し、計算で扱える形にする
ユーザーでも商品でも文章でも、現実の対象は複数の特徴を持っています。
例えばユーザーなら 年齢 、ログイン頻度 、購入回数 などがあります。
これらをまとめてひとつの箱に入れたものが ベクトル です。
数字のまとまりにすることで、対象を「比較できる形」にできます。
例えば、25歳、1ヶ月のログイン回数10回、1ヶ月の購入回数3回のユーザーAは次のように3次元のベクトルとして表せます。

2つのモノの近さを計算する
ベクトル化すると、 「どれくらい似ているか」を距離や角度で測ることができます。
例えば、ユーザーAの他に以下のユーザーがいたとします。

Aとこれらの2人のユーザーのベクトルの距離で表すと次のようになります。

これにより、Aに対してはBの方が近いと定量的に評価できるようになります。

距離は便利ですが、特徴のスケールが大きく異なると距離がそのまま比較にならないため、スケーリングが必要になることもあります。
他にも角度を使って評価することもできます。
行列と次元削減
講義の中で、
![]()
と言う式をもとに、「ベクトルxに行列Aを掛け合わせると次元削減できる」という説明がサラッと出てきました。以下ではこの意味について解説していきます。
上の式はベクトルxに行列Aを掛け合わせて、回転や拡大などの変換を行い、別のベクトルyにすることを意味しています。
このとき、ベクトルの要素間に関連があると、何らかの方法で可視化した際に線に沿って表れることがあります。
2次元のベクトルで極端な例を挙げると

の3つのベクトルがあり、これらを可視化すると直線上に並んでいることがわかります。

ここで、次のような行列Aを定義します。

Aとv1を掛け合わせる際の計算過程は次のようになります。

同様に残り2つのベクトルは次のようになります。

このように、2つ目の成分が全て0になり、次元が削減されたことが見て取れます。

この例では3つのベクトルがすべて一直線上にあるため、回転すると自然に 1 次元に落ちます。一般のデータでは PCA のような手法で主成分方向へ投影して次元削減を行います。
次元が削減されたことにより、距離計算の次元が減るため、距離の計算コストが減り、処理の高速化が期待できます。
勾配降下法で最適なパラメータを発見する
講義やハンズオンの中で軽く「勾配降下法」が出てくるので、イメージを掴んでおくと良いです。
機械学習モデルは、「入力 → 予測」を行います。しかし、最初は当然うまく予測できません。
そこで「どれくらい間違えたか」を数字にする必要があり、それが 損失(Loss) です。損失が最も小さくなる設定(パラメータ)を学習の中で探していきます。
この損失がどのような形か事前に分かっていれば、損失が最も小さくなるパラメータはすぐに分かります。
例えば、
![]()
という関数で表されるのであれば、凸の形で谷が1つあるのが分かります。この谷となる部分は、微分が0になる点を求めれば良いです。
この場合
![]()
でf’(x)が0となるxは1となります。

しかし、機械学習モデルの損失を表す関数は、
パラメータが何百万もあり、計算式を記述するには複雑、形状は凸でも谷が一つでもないため、微分値が0となるパラメータを求めることは不可能です。
ただし、現在のパラメータにおける傾き(勾配)だけは計算することができます。
ここで誤解しがちですが、実際には「f(x+Δx)−f(x) を計算して差分から求めている」わけではありません。
機械学習のフレームワークは自動微分(Automatic Differentiation) という仕組みを使い、モデルの計算過程を追跡しながら正確な勾配を効率よく計算します。そのため、損失関数の“形全体”が分からなくても、今いる地点の傾きだけは確実に求められる という状態を作れます。
そこで機械学習では、
- パラメータを少しだけ動かす
- 損失の傾き(勾配)を自動微分で計算する
- 傾きが小さくなる方向(=下り坂)に進む
という操作を繰り返していきます。傾きが0でも「谷の底」ではなく山の頂上の場合もあります。しかし、勾配”降下”法は常に下方向に進むので、途中で山の頂上にいくことはありません。勾配降下法で進んでいくと、傾きが0に近づく地点は基本的に谷の底に対応します。

上記が勾配降下法のざっくりとした説明で、このイメージを持っておくと、ハンズオンで手を動かしている際も、今自分が何をしているかを把握しやすくなります。
まとめ
Advanced Solutions Labの初学者向けのカリキュラムを受講する際に知っておくとよい知識について書きました。特にハンズオンは機械学習を動かすための具体的なコードを追っていくことになりますが、その際に「だいたいこんなことをやってるんだな」というイメージを持ちながら受講すると、より楽しめると思います。