Skip to content

DNET_DeepLearning

nishi_74322014 edited this page Sep 11, 2026 · 1 revision

深層学習(deep learning)

概要

深層学習(deep learning)について纏める。

特徴

  • ニューラルネットワークを多層(深層は3層以上)にして、
    誤差逆伝播法(バックプロパゲーション)
    と呼ばれる方法を用いて学習

  • 多層構造のニューラルネットワークに画像などのデータを入力すると、
    情報が第1層からより深くへ伝達されるうちに、各層で学習が繰り返される。

  • 機械学習と同じ様な事が出来るが、分布を学習するのではなく超平面的なモノの近似を行う。

  • 観測データから本質的な情報を抽出した特徴、潜在表現、内部表現(低次元表現、特徴ベクトル表現)を学習する。

  • 以下の強みと弱みがある。

強み

弱み

超平面的なモノの近似なので、

  • 必要となる学習データの数が膨大になる。

    • パラメタの数に依存
      (パラメタ数は以下に依存)

      • 層の深さ
      • 層の幅
    • 「バーニーおじさんのルール」では、
      ニューラルネットワークの重みパラメタの数に対して、
      最低その10倍以上の訓練データが必要となると言われている。

      • 必要に応じて「データ拡張(data augmentation)」
        ニューラルネットワークの該当節を参照)する。

      • データ量が少なすぎる場合は、深層学習以外のアプローチを検討。
        (とは言え、非構造化データの場合は深層学習が必要になる)

  • この結果、計算量も膨大になる。

  • また、

    などの問題もある。

移行メモ(正誤): 元ページは「層の深」で語が切れていたため「層の深さ」に補った。

対象

構造化データ

構造化データも対象にできるが、機械学習と比べ、優位性はそれほど高くない。
データサイエンス力の該当節を参照)

非構造化データ

機械学習では精度が出なかった非構造化データを対象にできる。

が、特に非構造化データのベクトル化の方法がポイントになる。

目視作業の自動化

フロントオフィス業務で画像認識を使うケースが多い
AIの活用例の該当節を参照)。

異常検知の自動化

上記を使った異常検知など。

  • 老朽化診断
  • 品質管理、不良品検品(不良品を認識して弾く)

歴史

※ 参考:AIの歴史(人工知能(AI)の該当節を参照)

以下、ニューラルネットワーク系の項目は ニューラルネットワーク
CNN 系の項目は 畳み込みニューラルネットワーク(CNN)の該当節を参照。

出来事
1943 ニューラルネットワークの基礎
1951 世界初のニューラルネットワーク学習マシン(SNARC)
1957 パーセプトロン
1979 福島邦彦によってCNNのネオコグニトロン提唱。
1982 ホップフィールドネットワーク
1985 ボルツマンマシン
1986 誤差逆伝播法(バックプロパゲーション)の再発明、以後定着
1989 ネオコグニトロン + バックプロパゲーション = LeNet
1998 LeNet-5

移行メモ(正誤): 元ページの「SNACR」「ポップフィールドネットワーク」は
それぞれ「SNARC」「ホップフィールドネットワーク」の誤記と判断し修正した。

2006

  • オートエンコーダー(ニューラルネットワークの該当節を参照)
  • トロント大学のジェフリー・ヒントンが深層学習ブームの
    火付け役となったDeep Belief Network(DBN)を発表

2010

画像認識(CNN)大規模画像認識競技会(ILSVRC)が始まる。

2012

  • ILSVRC
    ジェフリー・ヒントン率いるSuperVision(チーム名)
    のAlexNet(CNNアーキテクチャ名)が圧倒的な勝利を収めた。

  • Googleの猫

    • 教えることなく(機械学習(machine learning)の該当節を参照)、AIが自発的に猫を認識することに成功した。
    • AIは画像内の特徴を認識し自発的に分類できるようになった。

2014

  • ILSVRC

    • GoogLeNet(Google)
      分類、検出部門で優勝

    • VGGNet(オックスフォード)
      分類部門で2位

2015

  • ILSVRC

    • Microsoft ResearchのResNetが、初めて人間のエラー率 5% を上回る精度を達成。
    • ≒ 機械が目を獲得した。機械のカンブリア爆発(飛躍的進化)が予測された。

2017-18

以下はいずれも 言語処理(AI)の該当節を参照。

  • Transformer
  • ELMo
  • GPT-n
  • BERT

2019

  • ILSVRC

    • EfficientNetが効率的なスケールアップ規則の採用で、
      当時、パラメタ数を大幅に減少させ最高水準の精度を上回る。

違い

機械学習との違い

階層的な特徴量の学習が、機械学習と決定的に異なる点。

ベイズ統計との違い

  • ベイズ法はトップダウン方式
    AIが類例を認識すれば、様々なパターンに対応できるようになる。

  • 深層学習はボトムアップ方式

    • AIが生データで学習して成長していく。
    • 大量のデータが必要で、類似問題しか解けない。
    • GAN(敵対的生成ネットワーク)(ニューラルネットワークの該当節を参照)で弱点を補う。

詳細

ニューラルネットワークの体系

以下はいずれも ニューラルネットワークの該当節を参照。

CPU、GPU、TPU

CPU

  • 多機能で汎用的

    • OSのサポート
    • 仮想化
    • 命令実行順番変更
  • 複雑で連続的な処理が得意で早い。

  • 浮動小数点数の計算回数であるFLOPSは低い。

GPU

  • もともとグラフィックス計算のためのプロセッサ

  • 比較的低性能のユニット・コアを大量に積んだ並列的な処理が得意。

  • CPUに対して浮動小数点数の計算回数であるFLOPSは高い。

  • 深層学習は並列処理に向いた単純な行列演算が多く高速化が期待できる。

  • GPUの計算戦略

    • CPU⇔GPU通信回数の削減

      • はじめに全てのデータを送信する。
      • 計算を済ませて結果をCPU側に送り返す。
    • 並列数をふやす

      • ユニット・コアへ効率よく計算タスクを分配し、並列数の大きい計算を行う
      • M×N行列AとN×K行列Bのドット積=M×K行列Cを計算する場合、
        MユニットKコアをフル稼働させて一度に処理。
ユニット¥コア C1 C2 C... CK
U1 c11 c12 c1... c1k
U2 c21 c22 c2... c2k
U... c...1 c...2 c... c2k
UM cM1 cM2 cM... cMk
  • 教科書学習ではあまり取り上げられないが、実践で重要になるのは、GPUメモリについて。
    • GPUには「演算コア」と「専用メモリ (VRAM)」があり、深層学習のデータやパラメタは主にVRAMに置かれる。
    • つまり「モデルを動かすのに必要な全データ + 勾配計算用の一時領域」がメモリを圧迫する。
    • 問題(モデルが大きすぎて載らない/バッチサイズ制約/推論時でもメモリ不足)
    • 対策(Mixed Precision Training、Gradient Checkpointing、バッチ分割、パラメタオフロード、量子化)
    • また、計算を極限まで早くする方法として、次に考えられたのがGPU分散処理(コレは教科書に出る(笑))。

TPU

Google社が開発した、テンソル(NumPyの該当節を参照)計算処理に
最適化された特定用途向け集積回路(ASIC)

GPGPU

GPGPU(general purpose GPU)

  • グラフィック以外の目的での使用に最適化(汎用化)されたGPU
  • GPUの演算資源をグラフィックス計算以外の目的に応用する技術

開発環境

GPGPU制御を行う開発環境

  • 外部からの制御がないと動かないため複雑な処理はできない。
    GPUに対して命令を行うソフトウェアをインストールしてGPUを制御する。

    • GPUのメモリへのデータの転送
    • GPUのコアに対しての演算命令
  • 開発環境

    • CUDA
      NVIDIA社のGPUでは、CUDAという深層学習用開発環境
      が整えられていて、計算用の関数などが使用できる。

    • cuDNN
      TensorFlow・Keras、PyTorchの下位スタックで動く。
      更に下位スタックで、前述のCUDAが動作する。

  • 開発環境構築手順

    • GPUをインストール
    • CUDAをインストール
    • cuDNNをインストール
    • GPUに対する各種設定
    • GPU対応TensorFlow・Kerasなどでプログラムを書いて実行

その他

言語・ライブラリ

言語

ライブラリ

フレームワーク

Theano

  • MILAのOSS(3条項BSD)で2007年に初版リリース
  • 2017年以降、メンテナンス・フェーズ

言語

Python(コンパイラ、ライブラリ)

特徴

Numpyのように計算手続きを記述するのではなく、数式そのものを記述。

  • このことによって、計算対象となる行列等の実体のプログラム内での
    引き回しを考える事なく、最適化やGPUによる高速化の恩恵が受けられる。

  • また、微分を (数値的ではなく) 解析的に実行する事が出来る
    DS:数学的基礎 - 微分・偏微分の該当節を参照)。

参考

Caffe

Yangqing Jiaら当時Berkeleyのメンバーが中心に2013年頃
開発したOSS(BSD)のディープラーニングフレームワーク

  • Convolutional Architecture for Fast Feature Embedding.
  • 前身はDeCAF (Deep Convolutional Activation Feature)

言語

C++で実装、Pythonのインターフェイスあり。

特徴

  • コードを書かなくても設定ファイルだけで動かせる
  • 容易に拡張できるコード設計
  • PythonとMatlabからも使える
  • 高速(C++実装、GPUをシームレスに使い分け)
  • Githubの活発な開発コミュニティ
  • 画像認識向き
    • 画像分類
    • シーン認識
    • 物体検出
    • 領域分割

参考

Chainer

  • 2015年に株式会社Preferred Networks(PFN)からリリース。
  • 2019年12月5日、PyTorchに順次移行すると発表。

言語

Python

特徴

特⻑:様々なNNを直感的に記述可能

  • NNの構築をPythonのプログラムとして記述
  • CuPyによるCPU/GPU agnosticなコード記述
  • 動的なNN構築(Define-by-Runの独自コンセプト)を採用
    • しかし入力データによって計算グラフの構造が変化するRNNなどCNN以外のニューラルネットワークが台頭し、
    • ニューラルネットワークの構造を柔軟に制御できるDefine-by-Runが、Define-and-Runに比べて優勢に。

参考

CNTK

(Microsoft Cognitive Toolkit)

  • 2015年にMicrosoftからリリース。
  • 2016年にMITライセンスでGitHubに公開。

言語

C++、Python、.NET、BrainScript

特徴

  • リソース効率が良い。
  • ONNXを初めてサポート
  • コミュニティ発展が課題

参考

Facebook(Meta)の

  • PyTorch(専用項を設けた。)

Googleの

  • TensorFlow(TensorFlow・Kerasの該当節を参照。専用項を設けた。)
  • Keras(同上)

ONNX

専用項を設けた。

開発・運用環境

モデルの軽量化

プルーニング

  • 計算を高速化する手法

  • 学習後、ニューラル ネットワークの

    • レイヤー間の繋がりを切り、
    • (重要度の低い重みの一部を0にする(疎行列化する)ことでノードを削減し)
    • パラメタ(エッジとノード)数を削減
  • パラメタ削減後、再学習して精度を保つ。

  • 2種類のアプローチ

    • ニューロン単位でニューロン毎の重要度に基づきニューロンを削減

      • L2正則化を加えて学習後に、絶対値が小さい重みを0にする。
      • CNNでは難しい(ニューロン削減後も構造保持が必要)。
    • チャネル単位でチャネルを生成するフィルタ単位で削減

      • 各層のフィルタの重みの絶対値の総和が小さいものから各層の削減率分、削減
      • 以下にチャネル単位のプルーニングの代表的な2つのモデル
        ・Network Slimming:各チャネルの出力を scaling する変数γを導入し、学習後、γ値が小さいチャネルを削減
        ・Channel Pruning と ThiNet:特徴マップの誤差が最小となるチャネルを削除。

蒸留

  • 概要

    • 計算リソースを軽量化し精度も向上するモデル圧縮の1つ。
    • 一度訓練した大規模なモデルが得た知識を別の軽量なモデルに継承する。
  • 詳細

    • 教師モデルの推論結果を生徒モデルの訓練データに使用することで汎化した性能を示す。

      • soft target loss(教師モデルの推論結果との差)
      • soft target loss(教師モデルの推論結果との差)& hard target loss(教師データとの差)
    • 敵対的攻撃に対して頑健なモデルが得られるという性質がある。

    • データ拡張して教師モデルに入力、アンサンブル(平均)した結果を
      生徒モデルの訓練データに使用すれば、精度向上を図る事ができる。
      (半教師あり学習(機械学習(machine learning)の該当節を参照)と異なりラベルなしデータ活用の意図はない。)

量子化

例えばLLMのBERTでは、600MBぐらいがパラメタになる…モバイルやIoTでは難しい。

  • 概要

    • パラメタの精度に落とすことでモデルサイズを削減

      • 浮動小数点を64 bit → 32 bit
      • 深層学習用のBf16(符号:1、指数:8、仮数:7)
    • 量子化すると、

      • 計算の高速化
      • 省メモリ化
      • 精度が下がる。
    • 対象
      数値表現されるモノが対象となる。

      • パラメタ(重みとバイアス)
      • アクティベーション(活性化関数の出力)
      • その他、入力値、勾配、エラーなど
  • 代表的な手法

    • 二値化

      • BinaryConnect:パラメタを二値化
      • BinaryNet:パラメタとアクティベーションを二値化
      • XNOR-Nets:パラメタとアクティベーション、入力値も二値化
    • 三値化
      Ternary Weight Networksなどがあり、-1, 0, 1と0を含んだ値を使える。

    • それ以外

      • DoReFa-Net
        ・ビット長のみハイパー・パラメタ
        ・パラメタとアクティベーション、勾配も量子化

      • Quantized Neural Networks
        勾配計算も量子化する手法

分散処理

  • GPUを複数用いてより高速な計算を可能にする。

  • ただ、GPUを2つ用意すれば2倍で計算が可能と言う事ではない。

  • 以下のような工夫が必要になる。

    • 同じ精度を出すためのアルゴリズム上の工夫
    • ハードウェアと高速にやりとりができるようなシステム構築
  • 分散深層学習の並列化の二つの代表的な手法(同期・非同期)

データ並列(Data parallel)

  • 同じモデル計算の機構を複数のGPU上に構築し、データを分散させて計算し、統合を図る。

  • 各GPUにおいて異なるパラメタが訓練されるので、結果を合わせて最終的な学習済みモデルを得る。

  • 結果を合わせるモデルの統合方法については、以下の2つが有名。

    • 非同期型更新

      • 勾配計算後、勾配をパラメタ・サーバに送信し平均などの補正済み勾配を受けパラメタ更新。
      • 最後に計算が終わったGPUだけが正しいバッチ・サイズで計算でき全体の精度が落ちる。
      • 新しいモデルのパラメタが古い勾配情報で計算されてしまう恐れがある。
    • 同期型更新

      • 勾配計算後、全ノードの結果を共有し平均などの補正済み勾配を受けパラメタ更新。
      • バッチ・サイズが一律になるが、同期の待ち時間や、ボトルネックが発生し得る。

モデル並列(Model parallel)

  • アーキテクチャ

    • モデルを幅で分割して、別々のGPUを割り当てる。
    • モデルを深さで分割して、別々のGPUを割り当てる。
    • 一般的に幅で分割した場合の方が境界超え回数=通信回数が増える。
  • トレードオフ

    • メリット:正しいバッチ・サイズで計算できる。
    • デメリット:分割した境界を超える度に通信が発生。

ハード・システム基盤

  • GPU

  • Docker

  • 学習済モデル

    • TensorFlowHub
      デプロイ可能なトレーニング済み機械学習モデルのリポジトリ

ファースト・ステップ

ランタイム・ライブラリ

アルゴリズム

データ マイニング(DM)

ビジネス インテリジェンス(BI)の該当節を参照。

参考

Wikipedia

Qiita

YouTube

某处生活_LiveSomewhere

t-uesugi/videos

AIcia Solid Project

AI教室 AIRS-Lab

※ プロモーション動画の比率が高い。

AGIRobots

https://agirobots.com/

Neural Network Console

予備校のノリで学ぶ「大学の数学・物理」

ゼロから作るDeep Learning

農学情報科学

https://axa.biopapyrus.jp/

用語

One Learning Theory

  • KDDI-RA-201405-01-PRT.pdf
    https://rp.kddi-research.jp/download/report/RA2014005

    • 脳科学の世界には
      「One Learning Theory(たった一つの学習理論)」
      と呼ばれる仮説がある。

    • それは「視覚野」、「聴覚野」、「感覚野」など、大脳皮質の異なる領域が、
      実は同一の認知機構に従って動作している、とする仮説である。

    • これが正しければ、視覚野の認知機構に基づくスパース・コーディングは、
      単に画像認識のみならず、例えば聴覚(つまり音声認識)など他の分野にも応用できる。

スパース・コーディング

  • 入力の一部または全体を、辞書に含まれる要素の組み合わせで表現しようというもの。

  • スパースなデータ表現とは、

    • データを表現するための辞書を用意し、
    • その要素のできるだけ少ない組み合わせでデータを表現すること。
  • 参考


Tags: 移行, サービス, DX, AI, 深層学習, 開発基盤

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally