2014年10月10日
効果的なディープラーニング(深層学習)モデルのための10のヒント
10 Tips for Better Deep Learning Models
(2014-07-17)by Laura Diane Hamilton
本記事は、原著者の許諾のもと に翻訳・掲載しております。
昨日、私は幸運にも Arno Candel の H ₂ 0 を用いたディープラーニングの講演会に参加しました。
ディープラーニングとは、階層型ニューラルネットワーク(バックプロパゲーションを用いた確率的勾配降下法による教師あり学習)を指します。
彼は、堅牢なディープラーニングモデルを開発するための以下のヒントを与えてくれました。
1. 非常に大きなデータセットの結果を迅速に得られるように、 H ₂ 0を利用して複数のノードにアルゴリズムを分配する。
2. 平均値を0に、標準偏差を1に設定する特徴のスケーリングにより、 データを自動的に標準化する。 こうすることで、元の単位や分散に関係なく、それぞれの適切な特徴量を最終モデルに確実に提供することができます。
3. +/- sqrt(6/(#units + #units_previous_layer))における均一分布を用いて、 重みを自動的に初期化する。
4. 適応学習率を用いる。 各ニューロンに、そのトレーニング履歴を基に学習率を自動的に設定します。詳細については、Zeilerの2012年の論文” ADADELTA: An Adaptive Learning Rate Method “をご覧ください。
5. 正則化を用いる。 簡略化されたモデルを作成し、過学習のリスクを軽減するために、0以外の重みに対してペナルティを科し、また大きな重みに対して強いペナルティを科します。
6. 複雑な共適応を回避するために、ランダムに選択したニューロンを ドロップアウトする。 詳細については、Geoff Hintonの2012年の論文” Improving neural networks by preventing co-adaptation of feature detectors “をご覧ください。
7. グリッドサーチとチェックポイントを使用して 多くのハイパーパラメータを探索し、最も有望なモデルのトレーニングを継続する。
8. より複雑な関数にはより多くの階層を使用する (特に、非線形性を持つ関数)。
9. データ内の微細な構造を検出するために、 階層ごとにより多くのニューロンを使用する。
10. アンバランスなクラスに対して、 H ₂ 0のconfig balance_classes = true を使用する。
Arnoのスライドはこちら でご覧になれます。
監修者
古川陽介
株式会社リクルート プロダクト統括本部 プロダクト開発統括室 グループマネジャー 株式会社ニジボックス デベロップメント室 室長 Node.js 日本ユーザーグループ代表
株式会社リクルート プロダクト統括本部 プロダクト開発統括室 グループマネジャー 株式会社ニジボックス デベロップメント室 室長 Node.js 日本ユーザーグループ代表
複合機メーカー、ゲーム会社を経て、2016年に株式会社リクルートテクノロジーズ(現リクルート)入社。
現在はAPソリューショングループのマネジャーとしてアプリ基盤の改善や運用、各種開発支援ツールの開発、またテックリードとしてエンジニアチームの支援や育成までを担う。
2019年より株式会社ニジボックスを兼務し、室長としてエンジニア育成基盤の設計、技術指南も遂行。
Node.js 日本ユーザーグループの代表を務め、Node学園祭などを主宰。
- Twitter: @yosuke_furukawa
- Github: yosuke-furukawa