層 l は h_{l+1}=\phi(W_lh_l+b_l) と書ける。非線形 \phi がなければ多層でも一つの線形変換と等価である。学習は損失 L の勾配を逆伝播し、\theta\leftarrow\theta-\eta\nabla_\theta L と更新する。
図: Duskcoil作成。概念図であり、特定モデルの実測構造ではない。
活性化、正規化、残差接続、注意機構は学習しやすさと表現力を変える。過学習はデータ拡張、重み減衰、早期停止、適切な検証分割で監視する。訓練損失の低下は、安全・公平・因果的理解を保証しない。
| 要素 | 役割 | 注意 |
|---|---|---|
| 活性化 | 非線形表現 | 飽和・死んだユニット |
| 最適化器 | 勾配で更新 | 学習率・数値安定性 |
| 正則化 | 汎化を補助 | テストリークは防げない |
損失、出力層、数値安定性
分類器の最後にsoftmaxを置くと、クラス k の確率は p_k=\exp z_k/\sum_j\exp z_j となる。正解ラベルをone-hot y とすれば交差エントロピーは L=-\sum_k y_k\log p_k である。実装では \exp z を直接計算せず、最大logitを引くlog-sum-expを使う。大きなlogitで指数がオーバーフローし、損失がNaNになる問題を避けるためだ。回帰なら、外れ値に敏感な二乗誤差だけでなくHuber損失も候補になる。損失は「数値を小さくする式」ではなく、実運用でどの誤りを高くつけるかという仕様である。
勾配降下はバッチ全体でなくミニバッチを用いる。Adamのような適応的最適化器は立上りを容易にし得るが、学習率、weight decay、バッチサイズ、スケジュールが汎化・再現性を左右する。乱数種だけを固定しても、GPU演算、データ順、前処理、ライブラリ版が違えば同じ結果にならないことがある。データ、コード、環境、重み、評価スクリプトを一組で保存する。
代表的な設計の比較
| 構成 | 強み | 向く入力 | 失敗しやすい点 |
|---|---|---|---|
| MLP | 表形式・固定長特徴で単純 | センサ特徴、表データ | 空間・時系列構造を捨てる |
| CNN | 局所性と平行移動に強い | 画像、格子データ | 解像度・撮影条件シフト |
| RNN/状態空間 | 順序・履歴を持つ | 時系列、音声 | 長期依存、遅延、状態初期化 |
| Transformer | 長距離関係と条件付け | 文、画像、複合入力 | 計算量、データ来歴、幻覚的出力 |
アーキテクチャを複雑にしても、ラベル定義が曖昧なら性能上限は上がらない。例えば「故障」を故障発生後の記録でラベル化すると、未来情報を含む特徴が混ざり、オフライン精度だけが高くなる。訓練と配備の特徴生成を同じ実装にし、各特徴が予測時点で本当に利用可能かを監査する。
失敗例:よくある高精度の錯覚
画像データをランダムに分けると、同じ製品、同じ背景、連写画像が訓練とテストの両方に入ることがある。このときモデルは対象概念でなく撮影条件を記憶して高得点を出す。時系列では未来の移動平均、患者・機械単位では同一個体、地理データでは近隣地点がリーク源になる。外部施設、未来期間、別の撮影機器をhold-outにする評価が必要である。
もう一つは確率を意思決定と取り違える失敗だ。0.9と出たから危険、ではない。校正曲線で0.9予測群の実頻度を調べ、しきい値ごとの誤警報・見逃し・人の確認コストを表にする。危険な出力には拒否域を設け、入力品質不足や分布外検出では「不明」と返す設計を優先する。
実装手順
- 予測時点、対象集団、正解ラベル、許容遅延、誤りの費用を文章と表で決める。
- 個体・時間・場所をまたぐ分割を先に固定し、前処理を訓練集合だけでfitする。
- 単純な線形モデルや小型MLPを基準線として、同じ指標・同じ分割で比較する。
- 損失、学習率、勾配ノルム、NaN、訓練/検証差、属性別性能をログ化する。
- 欠損、ノイズ、照明、遅延、分布外入力を注入し、拒否・人手確認・ロールバックを試験する。
ニューラルネットワークは高い近似能力を持つが、入力の意味、データの権利、評価の独立性、安全な失敗処理を自動的には学ばない。モデルカード、データシート、変更履歴を残し、配備後も入力分布と実際の誤りを監視する。
勾配を観測可能にする
学習が動かないとき、最初に疑うべきはモデルの新規性ではなく、データと勾配の経路である。小さなバッチ一つを完全に暗記できるかを試すと、ラベルずれ、誤ったマスク、活性化後の次元、損失への入力形式といった配線ミスを早く発見できる。次に層ごとの活性値、勾配ノルム、更新量を記録する。勾配が下層ほどゼロへ近づけば消失、突然大きくなれば発散、更新量が常にゼロなら計算グラフの切断や学習対象からの除外を疑う。
初期化は信号の分散を層間で極端に変えないためにある。ReLU系ならHe初期化、tanh系ならXavier初期化が出発点になるが、正規化層や残差接続を含む実際の挙動はログで確かめる。勾配クリッピングは発散を抑える非常弁であって、異常な入力尺度や不正な損失を隠す道具ではない。混合精度ではアンダーフロー、オーバーフロー、loss scalingも監視し、同じサンプルをfloat32で通した結果と比較する。
実験を比較できる単位
一回の最高スコアではなく、乱数種を変えた分布、学習曲線、計算予算を揃えて比較する。パラメータ数が同じでも、前処理、事前学習、データ拡張、推論時の後処理が違えば公平な比較ではない。検証集合で選んだしきい値をテスト集合で再調整してはならない。クラス不均衡ではmacro平均とクラス別値を残し、確率を使う判断では校正誤差と意思決定曲線も確認する。
| 観測量 | 正常の目安 | 異常時に確認するもの |
|---|---|---|
| 訓練・検証損失 | ともに下がり差が安定 | リーク、過学習、分割単位 |
| 勾配ノルム | 有限で急変が少ない | 入力尺度、初期化、損失、クリップ |
| 予測分布 | クラス頻度と用途に整合 | ラベル対応、softmax軸、閾値 |
| 推論時間 | 上位分位も期限内 | バッチ依存、warm-up、前後処理 |
失敗例:改善に見える評価汚染
検証結果を見ながらモデル、拡張、乱数種を何十回も選ぶと、検証集合にも過適合する。最後に触らないテスト集合を一度だけ評価し、探索回数と選択基準を実験台帳へ残す。また、画像をファイル単位で分割しても、同じ動画の隣接フレームが別集合へ入れば背景を共有する。患者、車両、製造ロット、収録セッションなど独立性を決める実体のIDで分割する。
配備前チェックリスト
- 代表的な数十件を手計算または既知実装と照合し、テンソル形状とラベル対応を確認する。
- 一バッチへの過適合、勾配の有限性、保存後の再ロード一致を自動テストにする。
- ベースライン、候補モデル、量子化版を同じ入力・同じ計測器で比較する。
- 欠損、範囲外、分布外、タイムアウト時の拒否値と代替動作をAPI契約に含める。
- モデル版、データ版、コードcommit、依存関係、評価結果を一つのリリース記録へ結ぶ。
ニューラルネットワークの実装は「層を足す作業」ではなく、データから意思決定までの経路を測定可能にする作業である。小さい再現実験から始め、複雑さを一度に一つだけ増やせば、精度向上の理由と障害時の戻り先を説明できる。
コメント
コメントの投稿にはログインが必要です
まだコメントはありません。