GaiaExGaiaEx
ニューラルネットワーク:パーセプトロンからディープラーニングまで
開発者AI & ML12 min read

ニューラルネットワーク:パーセプトロンからディープラーニングまで

単純な関数の層はどのように複雑なパターンを学習するのか

投稿を共有

誰も理解できなかった一手

2016年3月10日、ソウルで行われた5戦シリーズの第2局で、AlphaGo という機械が碁盤の5線目に黒石を置きました。その手はあまりに奇妙で、人間の解説者たちはミスだと思いました。あるプロ棋士は、初心者ならこの手を打てば叱られるだろうと口にしました。18回の世界チャンピオンである李世乭(イ・セドル)は、席を立ち、気持ちを整えるために部屋を出て行きました。

それはミスではありませんでした。 50手後、いまや「第37手」として有名になったその石は、対局全体が転換した蝶番となっていました。AlphaGo は勝利しました。存命の中で最も偉大な棋士の一人とされる李世乭は、シリーズを4対1で落としました。そして、ここが重要な部分です。その一手を人間が教えたわけではありません。 それはどの教科書にも書かれていませんでした。機械は自分自身と何百万回もの対局を重ね、内部の数十億の小さな数字を調整していく中で、それを独自に発見したのです。人間がこれまで一度も見たことのないパターンが、そこから浮かび上がってきました。

碁には、観測可能な宇宙にある原子の数よりも多くの局面が存在します。それを力任せに探索することはできません。それに対するルールを書き出すこともできません。超人的なレベルでプレイする唯一の方法は学習することであり——そして、その学習を行っていたのがニューラルネットワークでした。十分なデータと十分な調整があれば、人間には完全には言語化できない構造を見つけ出せる、シンプルな数学的単位の積み重ねです。

その同じ機構——同じ重み付き合計、同じ訓練ループ、同じ勾配の微調整——が、あなたが話す言語モデル、不正なカード取引にフラグを立てるシステム、そしていまクオンツファンドが金融市場に向けているモデルを動かしています。このレッスンは、その箱の中で実際に何が起きているかについてです。

パーセプトロン:すべてが始まる場所

単純なスパムフィルターから GPT、AlphaGo まで、あらゆるニューラルネットワークは1つのアイデアから生まれています。1958年に Frank Rosenblatt が発明したパーセプトロンです。それは、生物学的なニューロンに緩く着想を得た数学的モデルです。実際のニューロンは、樹状突起を通じて電気信号を受け取り、細胞体でそれを蓄積し、統合された入力が閾値を超えたときだけ軸索に信号を発します。パーセプトロンも同じことを、電圧の代わりに数字で行うだけです。

パーセプトロンは入力のベクトル x を受け取り、それぞれの入力に学習された重み w を掛け、その積を合計し、閾値をシフトさせるバイアスb を加え、その結果を活性化関数に通します。結果がその基準を超えれば、ニューロンは「発火」し、そうでなければ静かなままです。これは全体として、たった1つのコンパクトな式です。output = f(w·x + b)

重みをボリュームのつまみだと考えてください。各入力はある大きさで届き、重みはその入力が特定のニューロンにとってどれだけ重要かを決めます。不正な取引を見抜くよう学習しているニューロンは、「取引サイズと口座履歴の比率」の重みを上げ、「時刻」の重みを下げるかもしれません。学習とは、その核心において、そのつまみを正しい設定に回すことにすぎません、それ以上に華やかなものではないのです。

単一のパーセプトロンには厳しい限界があります。直線(あるいは高次元では平坦な超平面)でしかデータを分離できないのです。「この点は線の上か下か?」には答えられますが、「この点は曲がった領域の内側にあるか?」には答えられません。歴史的な例は XOR 問題です——単一のパーセプトロンが証明可能に学習できないパターンで、1970年代に AI への資金提供を何年も凍らせる一因となった限界でした。その逃げ道は、後から見ればほとんど滑稽なほど単純です。多数のパーセプトロンを層に積み重ね、その間に非線形の活性化を挿入することです。それを行えば、得られるネットワークは空間を曲げ、折り、任意に複雑な形に切り出すことができます。

重要な洞察: ニューラルネットワークは魔法ではなく、脳でもありません。それは内積と単純な非線形関数の塔であり、より良い値へと微調整されていく数百万の重みを持っています。「知性」は完全にその重みがどんな数字に落ち着くかの中に存在し——その数字は、プログラマーによって書かれるのではなく、データによって見つけ出されるものです。
Perceptron: weighted sum + nonlinearity x₁ x₂ w₁ w₂ Σ + b linear part σ, ReLU… a ŷ Stack layers + nonlinear activations → universal approximator (in principle)
1つのニューロン:内積、バイアス、そして活性化——あらゆるディープネットの原子。

層、深さ、そしてなぜ「ディープ」学習なのか

1つのニューロンはつまみです。有用なネットワークとは、バケツリレーのように情報を前へ渡すへと組織化された、数千個のつまみです。

  • 入力層 — 生の特徴量が入ってくる場所です。画像のピクセル、文章の単語、あるいはトレーディングモデルなら価格、出来高、ボラティリティ、オーダーブックの不均衡といったものです。
  • 隠れ層 — 間にある層で、実際の作業が行われる場所です。各層は前の層の出力を受け取り、それをより抽象的な新しい特徴量に再結合します。
  • 出力層 — 最終的な答えです。確率、価格予測、クラスラベルなどです。

ディープラーニングの「ディープ」という言葉は、単に多くの隠れ層があることを意味します。そして深さは特定のものをもたらします。特徴量の階層です。画像ネットワークでは、最初の層がエッジを検出し、次の層がエッジを組み合わせて形にし、次がその形を組み合わせて物体にします。誰も「エッジ検出器」や「目検出器」をプログラムしたわけではありません——それらの概念は訓練から自然に生まれてくるのです。ネットワークは自分自身の中間的な語彙を発明するのです。

ここには美しい理論的な結果があります。万能近似定理です。1つの隠れ層しか持たないネットワークでも、十分な数のニューロンがあれば、任意の連続関数を任意の精度で近似できる、というものです。言い換えれば、正しいネットワークは原理的に、あなたのデータの中に存在するあらゆるパターンを表現できます。落とし穴——それは大きな落とし穴です——は、「原理的に」という言葉が重い仕事をしていることです。この定理は、そのようなネットワークが存在することを約束しますが、あなたがそれを見つけられるかどうか、それを絞り込むだけの十分なデータがあるかどうか、あるいはあなたが追いかけているパターンがそもそも本物であるかどうかについては、何も述べていません。金融のような低シグナルの領域では、「表現可能」と「学習可能」の間のこのギャップこそが、ほとんどのモデルが死んでいく場所です。

深さは労力の圧縮であり、魔法ではありません。 ディープネットワークは、浅いネットワークよりはるかに少ない総ニューロン数で複雑な関数を表現できます——しかし、余分な層が増えるたびに、訓練信号が逆方向に伝わっていかなければならない層がもう1つ増えることになり、まさにそれが、正しい工夫が現れるまでディープネットワークの訓練がとても難しかった理由です。

活性化関数:非線形の隠し味

人々を驚かせる事実があります。活性化関数がなければ、深さには価値がありません。 すべての層が単純な重み付き合計であれば、10層を積み重ねることは数学的に1層と同一になります——線形演算の連鎖は1つの線形演算に崩壊してしまうのです。多額の計算コストをかけて、実質的に直線を作っただけになってしまいます。活性化関数とは、層の間に挿入される非線形の折れであり、それによってネットワークが曲がることができ、その曲がることこそがネットワークを強力にしているのです。

実務者が知っておくべき活性化関数はこれらです。

  • シグモイド — σ(x) = 1/(1+e⁻ˣ)。どんな入力も (0, 1) の範囲に押し込み、確率として自然に読めます。バイナリの出力には優れていますが、隠れ層の中では良い選択ではありません。大きな正または負の入力に対して曲線が平坦になり、その勾配はほぼゼロになり、学習が止まってしまいます——勾配消失問題です。
  • Tanh — (−1, 1) の範囲で出力し、ゼロ中心であるため最適化に役立ちます。それでも極端な値で飽和しますが、シグモイドより軽度です。
  • ReLU — f(x) = max(0, x)。隠れ層における現代の標準です。ばかばかしいほど単純で、計算が安価で、すべての正の入力に対して健全な勾配を保ちます。その欠点は「dying ReLU」——常にゼロを出力するように押し込まれたニューロンが永久に不活性になってしまうことです。
  • Leaky ReLU — f(x) = max(0.01x, x)。負の値にもわずかな勾配のしみを通すことで、ニューロンが死ぬのを防ぎます。
  • GELU — ReLU の滑らかで確率的な親戚で、BERT や GPT のようなトランスフォーマーの内部で標準となっています。
実践的なルール: ほとんどすべての場面で、隠れ層には ReLU(あるいはその変種)を使いましょう。単一の是非の出力にはシグモイド、複数のクラスから1つを選ぶにはソフトマックス、予測された価格のような回帰の出力には活性化なし(線形)を使いましょう。これで、金融 ML で構築するものの大部分をカバーできます。

誤差逆伝播と勾配降下法:ネットワークはどう学習するか

ここまでで、重みでいっぱいのネットワークがあります。しかし、正しい重みの値はどこから来るのでしょうか?誰もそれを打ち込むわけではありません——数百万個あるのですから。それらは、本質的には組織化された試行錯誤に微積分が帳簿係として加わったフィードバックループを通じて発見されます。

ステップ1は順伝播です。例を1つ入力し、それを層を通じて流し、予測を読み取ります。ステップ2は、その予測がどれだけ間違っていたかを損失関数を使って測ることです。数値(価格)を予測する場合、平均二乗誤差が予測と真値の差の二乗を平均します。分類の場合、交差エントロピーが予測された確率が正しい答えからどれだけ離れているかを測ります。損失が高いということは「非常に間違っている」ことを意味し、訓練の目標全体は、その数字を押し下げることです。

ステップ3が巧妙な部分です。誤差逆伝播です。微積分の連鎖律を使って、このアルゴリズムは損失からすべての層を逆方向にたどり、個々の重みそれぞれについて勾配——「この重みをわずかに上げたら、誤差は増えるか減るか、どれくらいか?」という問いへの答え——を計算します。これが AI の冬を解かしたトリックです。1980年代に普及した逆伝播は、推測に頼る代わりに、数百万の重みにわたって効率的に責任を割り当てることを可能にしました。

ステップ4は勾配降下法です。ルール w = w − α × ∂L/∂w を使って、すべての重みを損失を減らす方向へ少しずつ動かします。谷底が見えない霧のかかった丘の斜面に立ち、それでも足の下でどちらが下り坂かは感じ取れる、と想像してください。あなたはその方向に一歩を踏み出し、それを繰り返します。学習率 α はあなたの歩幅であり、システム全体の中でおそらく最も重要なダイヤルです。大きすぎると谷を飛び越えて永遠にバウンドし続け、小さすぎると永遠に這うように進むか、途中の窪みで止まってしまいます。

すぐに出会う2つの改良があります。ミニバッチ——1つの例ごとに更新する(ノイズが多い)のではなく、あるいは全データセットのあとにしか更新しない(遅い)のでもなく、典型的には32から256の例からなる小さなバッチごとに更新します。これは安定していて、GPU に優しく、実践上のスイートスポットです。そしてAdam——各重みに独自の適応的な歩幅を与え、ノイズの多い勾配を滑らかにするモメンタムを追加する、より賢いオプティマイザーです。Adam は、ほとんどどんなプロジェクトでも出発点として賢明なデフォルトです——ただし金融では、そのシグナル対ノイズ比の低さから、学習率、重み減衰、そして停止点を手動で調整する必要が依然としてあります。

Training loop: forward → loss → backward → update Forward activations Loss L MSE, CE… Backward ∂L/∂w w ← w−η∇ Mini-batches: noisy gradients, faster steps, better GPU use Adam: per-parameter learning rates + momentum (default starting point) Still tune η, weight decay, early stopping for finance (low SNR)
自動微分は連鎖律をたどり、オプティマイザーがどれだけ強く一歩を踏み出すかを決める。

過学習:ネットワークが学習する代わりに記憶するとき

これは、他のどれよりも多くの金融モデルを破壊する失敗パターンです。ニューラルネットワークはあまりにも柔軟な関数フィッターであるため、チャンスがあれば、訓練データを——ランダムなノイズ、一回限りの偶然、決して繰り返さない巡り合わせも含めて——そのまま記憶してしまいます。見たことのあるデータでは素晴らしいスコアを出し、新しいものに遭遇した瞬間に崩れます。これが過学習であり、市場——本物のシグナルがかすかで、ノイズが耳をつんざくほど大きい場所——では、これは例外ではなく既定の結果です。それに対抗する道具は正則化と呼ばれます。

ドロップアウトが最も一般的です。各訓練ステップで、すべてのニューロンには確率 p(しばしば 0.2〜0.5)で一時的にオフになる可能性があります。ランダムに仲間が消え続ける中でも機能するよう強制されることで、ネットワークは少数の脆弱なニューロンにすべてを賭けるのではなく、多くのニューロンに知識を分散させることを学びます——単一のモデルに焼き込まれたアンサンブル効果です。予測時には、すべてのニューロンが適切にスケールされて再びオンになります。

L1・L2 ペナルティは、大きな重みに損失への税を課します。L2(重み減衰)は、どの単一の重みも大きくなりすぎることを抑制し、影響を均等に分散させます。L1 はより鋭く、無用な重みを積極的にちょうどゼロまで押し込み、自動的な特徴量選択を行います。あなたの金融データセットの100個の特徴量のほとんどがノイズである場合、L1 は実際にシグナルを運んでいるひと握りを静かに見つけ出すことができます。

バッチ正規化は各層の出力を安定した平均と分散に再スケールし、訓練を安定させ、より高い学習率を使えるようにします。早期停止は最もシンプルで信頼できる防御策です。ホールドアウトされた検証セットでの誤差を監視し、訓練誤差が下がり続けている一方でそれが上昇し始めた瞬間に停止します——その交差点こそ、ネットワークがパターンの学習からノイズの記憶へ切り替わる正確な瞬間です。

トレーダーへの誠実な結論: バックテストで完璧に見えるモデルは、ほぼ確実に過学習しています。本当のテストは、モデルが訓練中に一度も触れなかった時期のデータでのパフォーマンスです。あなたのネットワークがアウト・オブ・サンプルで単純なベースラインに勝てないなら、その印象的なバックテストは幻影であり——エッジではありません。

パターン向けの CNN、系列向けの RNN と LSTM

単純なフィードフォワードネットワークは、すべての入力を構造のない数字の束として扱います。しかし現実のデータの多くには構造があります——画像には空間的なレイアウトがあり、価格系列には時間的な順序があります——そして2つの専門化されたアーキテクチャがその構造を直接活用します。

畳み込みニューラルネットワーク(CNN)は画像のために構築されました。すべてのピクセルをすべてのニューロンに接続する代わりに、CNN は小さなフィルターを入力上で滑らせ、局所的なパターン——ここにエッジ、そこにテクスチャ——を探し、同じフィルターをあらゆる場所で再利用します。初期の層はエッジを捉え、より深い層はそれらを組み合わせて形や物体にします。金融では、研究者たちが CNN を次のような対象に向けています。

  • ローソク足チャートの画像——チャート読解を視覚的なパターン認識のタスクとして再構成しています。
  • オーダーブックのヒートマップ——マーケットデプスのスナップショットにおける需給の不均衡を見つけ出します。
  • 生の価格系列に対する1次元の畳み込み——画像用の CNN が空間的なパターンを学習するのと同じように、短い時間的なモチーフを学習します。

回帰型ニューラルネットワーク(RNN)は系列のために構築されました。1タイムステップずつ処理しながら、各ステップから次のステップへと隠れ状態——実行中のメモリ——を運びます。理論上は、これによって時系列に理想的なはずです。実践においては、通常の RNN は長い系列に対して勾配消失問題によって機能不全になります。何ステップも前からの信号は、逆伝播の途中でゼロに向かって縮んでいき、ネットワークは単純に遠い過去を忘れてしまいます。

Long Short-Term Memory(LSTM)ネットワークは、忘却・入力・出力という少数の学習可能なゲートによってこれを修正します。それらは各ステップで、メモリから何を消去し、何を書き込み、何を読み出すかを決定します。そのゲート機構により、LSTM は数百ステップにわたって関連する情報を保持できます。これが、昨日のイベントが今日の価格をいまも動かすような、金融時系列のモデリングにおいて LSTM が主力となった理由です。

import torch.nn as nn

class PricePredictor(nn.Module):
    def __init__(self, input_dim, hidden_dim, num_layers):
        super().__init__()
        self.lstm = nn.LSTM(input_dim, hidden_dim,
                            num_layers, batch_first=True,
                            dropout=0.2)
        self.fc = nn.Linear(hidden_dim, 1)

    def forward(self, x):
        out, _ = self.lstm(x)
        return self.fc(out[:, -1, :])

GaiaEx のようなプラットフォームでは、WebSocket フィードが継続的に価格とオーダーブックのデータをストリーミングしているため、LSTM はその系列を自然に取り込めます。とはいえ、この分野はすでに大きく先に進んでいます。現代の言語モデルの背後にあるアーキテクチャであるトランスフォーマーは、すべてのタイムステップを一つずつ行進する代わりに「アテンション」を使って同時に見ることで、多くの系列タスクにおいて LSTM に匹敵するか、それを上回っています。

ニューラルネットワークが解決しないこと(特に市場において)

ニューラルネットワークは目覚ましいパターン発見器です。しかし誠実な教育とは、それがどこで壊れるかを名指しすることを意味します——そしてトレーディングにおいて、それは高価な形で壊れます。

  • 存在しないときでもパターンを見つけてしまう。 ディープネットワークにノイズを与えれば、自信満々にそれをフィットさせます。市場は大部分がノイズなので、パターンが本物で持続的であることを示す責任は、単に去年のデータに存在していたというだけでなく、あなたの側にあります。
  • ブラックボックスである。 モデルは正確でありながら、その理由をあなたに教えてくれないことがあります。突然お金を失ったとき、そこにはしばしば明確な説明も、明らかな修正方法もありません。リスクを負う資本にとって、「なぜそうなったのかわからない」は深刻な負債です。
  • データを大量に必要とし、脆い。 ディープラーニングは数百万件のクリーンな例で輝きます。金融の歴史は短く、非定常で、ノイズが多いため——あなたのモデルを訓練したレジームが単に存在しなくなってしまうことがあります。これは分布シフトと呼ばれる問題です。
  • 単純なモデルに無条件で勝てるわけではない。 金融で一般的な表形式の特徴量ベースのデータでは、XGBoost のような勾定ブースティングされた木は、より高速に訓練でき解釈も容易でありながら、ニューラルネットワークをしばしば上回ります。複雑さはコストであり、美徳ではありません。
  • 攻撃されうる。 入力への小さく意図的な摂動が、ネットワークの出力を反転させることがあります——敵対的サンプルと呼ばれるもので、敵対者があなたのモデルが見るものを形作れる場面ではどこでも問題になります。
勝者と破綻者を分ける規律: 常にニューラルネットワークを単純なベースラインと比較して評価し、常にモデルが訓練中に一度も見ていない期間のデータで評価し、ストレステストできないモデルの背後に資本を投じることは決してしないことです。AlphaGo には完璧なシミュレーターと無制限の自己対局がありました。市場が与えてくれるのは、1つの、ノイズの多い、繰り返されることのない歴史です——その違いを尊重しましょう。

ハードウェア、ツール、そしてあなたの次のステップ

ニューラルネットワークの訓練は計算負荷が重く——大部分は行列の乗算であり——それを動かすハードウェアによって、反復速度は「一晩がかり」から「コーヒー1杯の間」まで変わります。

GPU が標準です。数千のコアがすべて同じ演算を異なるデータに対して同時に実行し、これはまさにニューラルネットワークの数学の形そのものです。CPU では8時間かかるモデルが、現代の GPU では15分で終わることがあります。NVIDIA が支配的です。コンシューマー向けカード(RTX クラスの GPU)は学習には十分で、データセンター向けカード(A100、H100)やクラウドインスタンスは本番規模の訓練を担います。Google 独自のテンソル演算チップであるTPU は、Google Cloud を通じて非常に大規模なモデルで輝きますが、ソフトウェアサポートの広さから、GPU が多くの実務者にとって実用的なデフォルトのままです。

始めるために何かを買う必要はありません。Google Colab は学習とプロトタイピングには十分な無料の GPU 時間を配布しています。モデルが成長するにつれて、必要に応じてクラウド GPU をレンタルしましょう。専用のハードウェアを購入するのは、毎日訓練を行い、クラウドの料金がそれを正当化する段階になってからで十分です。

ここからの理にかなった学習経路:

  • まずいくつかのエンジニアリングされた特徴量に対する単純なフィードフォワードネットワークから始めましょう——訓練が速く、デバッグが容易で、誠実なベースラインになります。
  • 生の価格系列に1次元 CNN を試し、そのベースラインと直接比較しましょう。
  • GaiaEx の API から取得したローソク足データの系列を消費する LSTM を構築しましょう。
  • アテンションとトランスフォーマーを学びましょう——系列に対してますます選ばれるアーキテクチャになっています。
  • 何よりも、常にあなたのディープモデルを XGBoost のような勾配ブースティングのベースラインと戦わせましょう。あなたの表形式の金融データに対して、ニューラルネットワークがアウト・オブ・サンプルで単純なモデルに勝てないなら、単純なモデルを採用して前に進みましょう。

第37手を見つけたのと同じループ——予測し、誤差を測り、重みを微調整し、繰り返す——が、このリストのすべてのシステムの内側で動いているループです。そのループを理解すれば、ディープラーニングを理解したことになります。残りは、その上に積み重なるアーキテクチャとエンジニアリングです。