E資格受験前なので復習がてら学んだことをざっくり振り返る ~ 深層学習後編、開発環境編~

12 min
xainome

xainome

データサイエンティスト風味のSES
自身の話をするよりは人の話を聞く方が好き
普通の人

FOLLOW

前回の続きになります。深層学習の後編になります。もう一息です。

まずは生成モデルと識別モデルについてです。

  • 識別モデルは入力Xから出力Yへの直接的なマッピングを学習することを目指しています。このマッピングは条件付き確率P(Y | X)を使用して表される。与えられた入力データに基づいて出力ラベルの確率を最も正確に予測する。
  • 生成モデルはデータの同時確率P(X,Y)またはデータの周辺確率P(X)を通じて行われる。観測されたデータがどのように生成されるかの理解を深め、新しいデータポイントを生成する能力を持つこと。
  • ナイーブベイズ:P(X | Y) = ΠnP(xi |Y)、P(xi |Y)は特徴xiが与えられたクラスYに属する条件付確率
  • GAN:生成器Gがランダムノイズからデータを生成し、識別器Dが実データと生成データを区別しようとする。minG maxD V(D,G) = Ex~Pdata(x) [logD(x)] + Ez~P(z) [log(1 – D(G(z)))]、V(D,G)は識別機Dと生成器Gの値関数、Pdataは実データの分布、Pzは生成器の入力となるノイズの分布。

次はVAEとVQ-VAEについてです。

  • VAE(Variational Autoencoder):入力データを低次元の潜在空間にエンコードし、その潜在表現から元のデータを復元するように学習するオートエンコーダの一種。潜在空間における確率分布をモデリングすることにより、新しいデータの生成も可能。
    • データxから潜在変数zの分布qΦ(z | x)を推定し、デコーダを用いてzからxを再構築する確率pθ(x | z)を最大化する。
    • 潜在変数zの事後分布qΦ(z | x)が事前分布p(x)に近づくように制約をかける。そして以下の損失関数を最大化する。
      • L(θ,Φ; x) = Eq(z | x)[logpθ(x | z)] – Dkl(qθ(z | x)||p(x))、DklでqΦ(z | x)とp(z)の分布の類似度を測る。
  • VQ-VAE(Vector Quantized-Variational Autoencoder):VAEの概念を拡張し、潜在空間において離散的な表現を使用する。ンコーダが出力する連続的な潜在表現を、事前に定義された離散的なコードブックにマッピングすることにより、潜在表現をベクトル量子化する。
    • エンコーダが出力する潜在変数ze(x)を、コードブック内の最も近いコードベクトルzq​にマッピングする。損失関数は以下のように定義する。
      • L = logpθ(x | zq) + ||sg[ze(x)] – zq||^2 + β||ze(x) – sg[zq]||^2、sg[⋅]はstop-gradient演算子、バックプロパゲーション時にその入力に対する勾配の計算を停止させる。βはハイパーパラメータ
  • 使用例:画像生成や画像編集、データ圧縮、音声合成と音声変換、テキスト生成とスタイル転送、異常検知、強化学習

次はDCGANとConditional GANについてです。

  • DCGAN(Deep Convolutional Generative Adversarial Networks):CNNを用いたGANの一種、プーリング層を使わずに、ストライド畳み込みと逆畳み込みを使用する。 学習済みモデルは、未ラベルの大規模データセットから有用な特徴を自動で抽出するでき、他のタスクに転移学習で利用可能。 バッチ正規化をGeneratorとDiscriminatorの両方に適用することで、学習過程を安定させる。
    • minG maxD V(D,G) = Ex~Pdata(x)[logD(x)] + Ez~P(z)[log(1-D(G(z)))]、G(z)はGeneratorが生成したデータ、Discriminatorは本物のデータと見分けた確率で GeneratorとDiscriminatorにCNNを採用している。
  • Conditional GAN:与えられた条件(ラベルやテキストなど)に基づいて目的のデータを生成する。
    • GeneratorとDiscriminatorに条件yを追加するため minG maxD V(D,G) = Ex~Pdata(x)[logD(x | y)] + Ez~P(z)[log(1-D(G(z | y)))]

次はAlphaGoとA3Cについてです。

  • AlphaGo:Google傘下のDeepMind社によって開発された囲碁のプログラム。深層学習と強化学習を組み合わせている。 またモンテカルト探索木(MCTS)を採用しており、可能な手のシミュレーションを繰り返し行い、最も有望な手を選択し、探索空間を効率的に縮小する。
  • A3C(Asynchronous Advantage Actor-Critic):強化学習の一つで複数のエージェントが非同期に学習を進めることで、効率的に学習する。 頭文字からわかるように3つの技術が使用されている
    • 非同期学習(Asynchronous Learning):複数のエージェントがそれぞれ異なるコピーの環境で学習を行い、経験を共有する。
    • アドバンテージ関数(Advantage Function):エージェントの行動が平均的な行動よりもどれだけ良いかを示す指標を用いて、より効率的な学習をする。
    • アクター-クリティック(Actor-Critic):アクターは行動を選択し、クリティックはその行動の価値を評価する。

次はグラフ畳み込みについてです。

  • グラフ畳み込み(Graph Convolution):グラフ構造データを処理するための手法でノード(頂点)とそれらをつなぐエッジ(辺)で構成される。 GNNはNNやCNNと違い、非ユークリッド構造データも扱うことができる。
  • ノードの特徴ベクトルとその近傍のノードからの情報集約し、新たな特徴表現を生成する。 集約する際の関数は平均、和、最大値等さまざまである。集約された情報を用いて、各ノードの特徴ベクトルを更新する。重み付き線形結合と非線形活性化関数を使用する。
  • 使用例:化学(分子の性質予測)、生物学(タンパク質間相互作用の予測)、推薦システム(ユーザーとアイテムの関係性のモデリング)、交通(交通網の最適化)

次はGoogleNet、ResNet、WideResNetについてです。

  • GoogLeNet:ILSVRC2014優勝、1×1、3×3、5×5の異なるサイズの畳み込みフィルターと3×3のmaxプーリング層から構成されるInception(V1)モジュールを導入。 計算資源の効率的な使用とネットワークの深さおよび幅の増加を可能にした。
    • V2はバッチ正規化の導入、V3はNxNの畳み込みをNx1と1xNに分担し、ラベル平滑化(Label Smoothing)が導入された。V4はResNet化を行いInception-ResNetを完成、深い層でも高い性能を実現。
  • ResNet(Residual Network):ILSVRC 2015優勝、残差ブロックを導入し、非常に深いネットワークでも勾配消失/爆発の問題を抑制。 残差ブロックは入力を出力に直接加算するショートカット接続を使用することで、入力情報を深い層に直接伝達し、勾配の流れを改善する。
  • WideResNet:ResNetでは「特徴再利用の減少」が起こる。これはいくつかのブロックのみが有用な表現を学習し、多くのブロックが最終的な結果にほとんど貢献しないという問題。 この問題を解消するためResNetのアイデアをベースに、フィルターの幅を増やすことで性能を向上させる。ドロップアウトでさらに性能が向上する。

次はDenseNetとEfficientNetについてです。

  • DenseNet(Densely Connected Convolutional Networks):各層が前のすべての層と直接接続している。またDenseBlockとTransitionLayerを交互に重ねている。 TransitionLayerはDenseBlockが複数ある場合、1×1の畳み込み層と2×2のAveragePoolingを行う。 特徴伝達を効率化し、パラメータの数を削減することで勾配の消失問題を軽減し、特徴の効率的な再利用を実現する。
  • EfficientNet:Compound Scaling Methodを採用しており、レイヤー数、チャネル数、または入力画像サイズのいずれか一方を独立してスケーリングすることが一般的だったが、三つの次元を同時にかつ均衡良くスケーリングする。 これにより少ない計算資源で高い精度を達成する。また開発時にはAutoMLが使用されたことで精度と効率の最適化が実現した。

次はFaster-RCNN、YOLO、SSDについてです。

  • Faster R-CNN:R-CNNを改良したFast R-CNNをさらに改良したモデル。
    • R-CNNはSelective Searchを使用して画像から2000個程度のリージョンプロポーザルを生成し、それに対してCNNで特徴抽出、SVMで分類を実施する。
    • ただし、時間がかかるためFast R-CNNでは全体の画像に対して一度だけCNNを適用し、その特徴マップからリージョンプロポーザルに対応する特徴をRoIプーリングを用いて抽出する。
      • RoIPooling:入力領域(RoI)を固定サイズの特徴マップに変換後、固定数のセル(7×7等)に等間隔で分割し、各セル内で最大値を選択する。異なるサイズのRoIから同一サイズの特徴表現を得れる。
      • 強制分割によりオブジェクトの位置情報が失われることがある。特に小さいオブジェクトや細部の情報など。
    • ただし、Selective Searchを使用していることで時間がかかるためFaster R-CNNではRPN(リージョン・プロポーザル・ネットワーク)を導入したことでSelective Searchを使わず時間の短縮につながった。
    • RPNとは機械学習モデルで入力画像から特徴マップを出力しAnchor boxesを設定、Anchor boxesと答え(Ground Truth)を比較しながら教師データの作成を行う。
      • アンカーボックスは異なるアスペクト比(幅と高さの比率)やスケール(サイズ)を持つ複数のボックスで構成されている。
      • アンカーボックスを基準にオブジェクトの正確な位置(bounding boxの座標)を調整する。アンカーボックスに対するオフセット(位置のずれ)やサイズの変化を予測し、最終的なオブジェクトのbounding boxを決定する。
      • 各アンカーボックスに対して、モデルはその領域にオブジェクトが存在するかどうか、そして存在する場合はどのクラスに属するかを予測する。
  • YOLO (You Only Look Once):一度の推論で画像全体のオブジェクトを検出する。予め画像全体を正方形に分割し(対象物がなさそうな背景をカット)、バウンディングボックス設定と分析を同時に実行する。
    • 小さなオブジェクトの検出が苦手だがバージョンが上がるごとに改善されていった。
    • リアルタイムでの処理に適している。
  • SSD (Single Shot MultiBox Detector):異なるスケールの特徴マップを使用してオブジェクトを検出する。複数の異なる解像度の特徴マップ上にアンカーボックスを配置し、それぞれのアンカーボックスに対してオブジェクトの存在とクラスを予測する。
    • YOLOに比べて小さいオブジェクトの検出精度が高く、画像内の様々なスケールのオブジェクトに対応できるため、広範囲のアプリケーションで有用。
    • 計算量が多くなるため、推論速度が遅くなる。密集したオブジェクトの検出は性能が下がることがある。

次はMask-RCNNとFCOSについてです。

  • Mask R-CNN:各検出されたオブジェクトに対してバウンディングボックスだけでなく、セグメンテーションマスクも生成する。RoIPoolingの量子化誤差を解消したRoIAlignを導入。さらにオブジェクトの分類、バウンディングボックス、マスクの生成を同時に学習する。
  • 計算コストが高いため、大規模なデータセットやリアルタイムアプリでは課題がある。
    • RoIAlignはRoIを固定サイズのセルに分割する際に、ピクセルの境界に合わせて正確にサンプリングを行う。ビリニア補間を使用して、非整数座標での特徴量を計算し、精密な位置情報を保持する。
    • RoIの元のサイズが固定サイズのグリッドに正確にフィットしない場合、量子化を行い最大の特徴値を選択する。量子化や最大値の選択で情報が失われる。
    • ビリニア補間とは近傍の4ピクセルを特定し、x軸の値を左右のピクセル値を用いて保管した後、y軸も同様に上下で補間する。
  • FCOS (Fully Convolutional One-Stage Object Detection):アンカーフリーとワンステージ検出を採用している。
    • アンカーフリーはアンカーボックスを使用せず、画像全体を直接解析する。ワンステージ検出はリージョンプロポーザルの抽出とクラス識別を同時に行う。(Faster R-CNNは別々に実行する。)
    • ツーステージ検出に比べて計算コストが小さく、推論速度が速いが精度で劣ることがある。

次はWordEmbeddingとTransformerについてです。

  • Word Embeddingは単語をベクトルの形で表現する。単語間の意味的な類似性を計算可能にする。Word2VecやGloVe、FastTextが有名。
    • Word2VecはCBOW(ContinuousBag-of-Words)とSkip-Gramというアーキテクチャがある。
      • CBOW:ある単語の前後の単語からその単語を予測。
      • Skip-Gram:は、ある単語からその周囲の単語を予測。
    • Gloveは単語の共起行列を使用して単語ベクトルを学習する。共起行列の非ゼロ要素に対して最適化を行い、ベクトルを生成する。
    • FastTextはWord2Vecの拡張で細かい単位(例えばn-gram)に分割して扱う。未知の単語や名前付け規則の異なる単語でも、ベクトル表現を生成できる。
    • 上記のアルゴリズムはベクトル間のコサイン類似度によって計算され、-1~1の範囲を持ち角度が小さいほど類似度が高い。
  • TransformerはAttention機構を中心にしていてRNNやLSTMに比べて計算効率が良く、長い依存関係を捉えられる。並列化がおこなわれ入力の全てが一度に処理されたことで過去情報だけでなく未来の情報も等しく扱えるようになった。
    • ポジションエンコーディング:入力シーケンスの各要素の位置情報を符号化する。
    • 各サブレイヤーの出力には残差接続が適用され、レイヤー正規化がおこなわれる。

次はBERTとGPT-nについてです。

  • 共通としてはTransformerをベースとしている。
  • Bard(Gemini):双方向のTransformerを使用する。入力テキストを前後の両方向から考慮して理解し、主にエンコーダーのみを利用する。
    • マスクされたトークン予測(ランダムに選ばれた単語をマスクし、その単語を予測)と次文予測(一つ目の文に続く文が二つ目の文かどうか)のタスクを採用している。
    • 文章理解や意味解析タスクでよい性能を発揮する。細かなニュアンスや言語の微妙な違いを捉える
  • GPT:Transformerのデコーダー部分を使っているが、自己回帰的な性質を持つ一方向モデル。
    • 与えられた単語のシーケンスに基づいて次の単語を予測する。
    • テキスト生成タスクで優れた性能を発揮する。

次はWaveNetについてです。

  • DeepMindにより作られたモデル。音声をサンプリング及び量子化を行い、CNNで学習する。Dilated Causal Convolutionを導入し、長期依存の課題を解決した。
    • Dilated Convolution(畳み込みカーネルの受容野を増大させ、カーネルの各要素間に「空白」を挿入する)は広範な部分を一度に見る。
    • Causal Convolution(将来の情報を使用せずに、過去の情報のみを考慮して出力を生成する)は生成タスクでリアルタイム性や時系列の一貫性を保つ。
  • 確率分布は、過去の時系列データに加えて、付加情報(テキストや声)も条件として持つことができる。

次はサンプリング、短時間フーリエ変換、メル尺度についてです。

  • サンプリング:連続的なアナログの音声信号を離散的なデジタル信号へ変換する際に一定間隔で標本をとる。サンプレートはデジタルオーディオの品質を決定する重要な要素で単位はHz
  • 短時間フーリエ変換 (STFT):信号を小さな断片に分割し(関数に窓関数をずらしながら掛け)、各断片にフーリエ変換を適用する。時間と周波数の情報を同時に得る。
  • メル尺度:人間の感じる周波数感覚を模倣した周波数尺度。低周波数での感度が高く、高周波数になるにつれて感度が低くなる。

次はCTCについてです。

  • CTC (Connectionist Temporal Classification):入力と出力の長さが異なる場合にも対応できるRNNの訓練手法。”hai”という音声があった場合、”hhhai”、”ha__ai”、”_ha_i”というものでも”hai”と認識させる。ちなみに”_”をブランクという。

次はpix2pixについてです。

  • 画像を変換するための条件付き敵対的ネットワークの一種。ジェネレータがよりリアルな画像を生成するように促し、ディスクリミネータが本物と偽物の画像をより効果的に区別できるようにする。医療画像の解析やオブジェクトの写真から3Dモデルを生成することに使用される。

次はSiameseNetとTripletLossについてです。

  • Siamese Network(シャムネットワーク):二つの入力が同じクラスに属するかどうかを判定する。同一のネットワークに入力し、その出力を比較して、二つの入力の類似度を計算する。
    • Contrastive Lossと呼ばれる損失関数を使い、同じクラスのペアの出力が近く、異なるクラスのペアの出力が遠くなるよう学習する。損失関数が最小化するよう調整する。
    • L = 1 / 2 (YD^2 + (1 – Y)max(margin – D, 0)^2)、Yはラベル、Dは距離、marginはハイパーパラメータとする。
  • Triplet Loss:三つの入力であるアンカー、ポジティブサンプル(類似している)、ネガティブサンプル(類似していない)間の相対的な距離を学習する。損失関数でアンカーとポジティブの距離は近く、アンカーとネガティブの距離は遠くなるように学習する。
    • L(triplet) = [dp – dn + α]、αはマージンを表すハイパーパラメータ
  • Siamese Networkは2つの画像を近づけるか遠ざけるかなのでコンテキスト(同一人物で判定するか性別で判定するか)を考慮する必要がある。一方でTriplet Lossは基準となる画像があるので類似度が高いか低いかで判断する。

次はMAMLについてです。

  • MAML(Model-Agnostic Meta-Learning):メタラーニングの手法で機械学習モデルが新しいタスクを効率的に学習するための「学習を学ぶ」手法の総称。モデルの初期パラメータを見つけることで、少数の学習例から新しいタスクを学ぶまたは転移学習で効果的に発揮する。
  • 事前学習した後、新しいタスクに適用させる。また初期パラメータの選び方が大切。NNだけでなく、決定木や勾配ブースティングにも対応できる。
  • ただし、計算コストが増たり、極端に異なるタスクの一般化は精度が落ちる。

次はGrad-CAMについてです。

  • Grad-CAM (Gradient-weighted Class Activation Mapping):CNNが特定のクラスを識別する際に、どのような画像領域に注目しているか、なぜその予測をしたのかを視覚化する技術。
  • CNNの最終畳み込み層の特徴マップに対する特定クラスの予測に対する勾配を利用し、特徴マップの重要性を計算する。勾配を特徴マップに掛け合わせ、全特徴マップの重み付き和を取り、活性化マップを生成する。
    • 画像を入力し、特定のクラスに対する予測スコアを得る。
    • 予測スコアに対し、最終畳み込み層の出力特徴マップの各チャンネルに対する勾配を計算する。
    • 各特徴マップチャンネルの勾配のグローバル平均を計算、重要性スコアとして使用する。
    • 重要性スコアを乗じ、その和を取ることで、クラス活性化マップを生成する。
    • 活性化マップをReLU関数に通し、モデルがクラス予測に最も貢献する領域のみを強調する。

次はLIMEとSHAPについてです。

  • 機械学習モデルの予測を解釈可能にするための手法で、信頼性のあるAIシステムを構築する。
  • LIME(Local Interpretable Model-agnostic Explanations):複雑なモデルの局所的な振る舞いを近似する簡単なモデルを生成する。
    • 予測を行う特定のインスタンスの周囲でデータをサンプリングし、単純なモデル(線形回帰等)を訓練する。
  • SHAP(SHapley Additive exPlanations):ゲーム理論のシャープレイ値に基づいた手法でモデルの出力に対する各特徴の寄与(報酬)を公平に分配する。
    • モデルの予測を特徴値の貢献度に分解し、個々の特徴が予測にどの程度影響を与えるか示す。全体的なモデルの振る舞いと個々の予測両方の解釈ができる。
  • LIMEは個々の予測の局所的な解釈、SHAPは特徴の重要度を定量化する際に有用。

次はMobileNetについてです。

  • MobileNetはモバイルやエッジデバイスでの使用に適して、リソースが限られている環境でも高速かつ効率的に動作する設計である。
    • Depthwise Convolution:各入力チャネルに対して独立した畳み込みを実施。
    • Pointwise Convolution:1×1の畳み込みを使用して、Depthwise Convolutionによって生成された特徴マップのチャネル間で情報を結合する。
    • MobileNetV1:Depthwise Separable Convolutionを導入する。通常のConvolutionをDepthwise Conv.と Pointwise Conv.の2つに分け、13段積み上げて、全結合層をくっつける構造。
    • MobileNetV2:Pointwise Convolutionの計算量を減らすため、Depthwise Separable Convolutionに代わってInverted Residual(ResNetで使われるResidual Blockを応用したもの)を導入した。Residual Blockの途中にDepthwise Convolutionを入れている。
    • MobileNetV3:MobileNetV2で導入したbottleneck構造にSE(Squeeze and Excitation) blockを組み合わせる。

次はプルーニング、蒸留、量子化についてです。

  • プルーニング (Pruning):モデルの重みの中で重要度が低いものを削除する技術。モデルのサイズを減らし、推論速度を向上させる。
    • 重みプルーニング:重みを完全にゼロに設定する。
    • 構造プルーニング:ニューロンやチャネル全体を削除する。
  • 蒸留 (Distillation):大きくて複雑なモデル(教師モデル)から、より小さくシンプルなモデル(生徒モデル)へ知識を転移させる技術。
    • Hard Target:教師モデルの学習などで使用する正解ラベル
    • Soft Target:教師モデルの出力(スコア分布)
  • 量子化 (Quantization):モデルの重みや活性化関数の値をより低ビットの表現に変換する技術(32ビットの浮動小数点を8ビットに変換等)。量子化する対象は重みと中間層。重みについては常に推論前に量子化すること。中間層は以下の2パターン
    • 静的量子化:中間層で予め、量子化パラメーターを計算しておく方法。量子化パラメーターが全ての入力に対して固定されているので量子化誤差が大きくなる可能性がある。
    • 動的量子化:推論時に動的に量子化パラメーターを求め計算する方法。レイヤーごとに量子化と計算を行うので処理負荷が大きくなる。

次はモデル並列とデータ並列についてです。

  • データ並列:訓練データを複数の処理ユニット(GPUやCPU)に分割し、同じモデルの異なるデータセットに対する計算を行う。データの異なるバッチを使用して同じモデルを訓練し、その後、各ユニットからの勾配や更新情報を集約してモデルを更新する。
  • モデル並列:モデル自体を複数の処理ユニットに分割して、それぞれのユニットでモデルの異なる部分の計算を行う。モデルが非常に大きくて単一の処理ユニットに収まらない場合や、異なるモデルの部分を異なる計算資源で最適に実行したい場合に有効。各処理ユニットはモデルの異なるセクションを担当し、前のユニットからの出力を次のユニットへの入力として渡しながら、同時に計算を進める。

次はGPUについてです。

  • GPU(Graphics Processing Unit):もともとはグラフィック処理のため設計されていたが、並列能力により機械学習や深層学習に適していることが判明。
    • 並列処理能力があり、多数の演算を同時に処理できる。行列計算やベクトル計算を高速に実行可能。
    • 高いスループット(単位時間あたりに処理できるデータ量)を持つので大量のデータを高速で処理できる。

次はDockerについてです。

  • 仮想マシンよりもはるかに軽量でホストOSのカーネルを共有する。Dockerイメージはバージョン管理され、イメージから生成されるコンテナは別環境でも再現できる。プロセスやファイルシステムを共有せず、セキュリティや整合性が向上する。
    • Dockerイメージ: アプリケーションとその依存関係を含むテンプレートファイル。これを基にコンテナを作成します。
    • Dockerコンテナ: Dockerイメージを実行したインスタンス。アプリ実行環境。
    • Docker Compose: 複数のコンテナを定義し、一度に管理・実行するためのツール。開発環境や本番環境のセットアップを簡単に行える。

これで試験範囲の振り返りは以上になります。知識量はG検定に比べてかなりボリュームのある内容になっています。特に深層学習については。

また、知識だけでなくプログラムの実装と理解も必要になってきます。私もいい勉強になったと思います。知識は覚えるだけじゃなくどう活用するかが大事だと思うので、自身で実装してみたり、gitにあげて色んな人に見てもらうのも手だと思います。

それでは次回の記事で、ではでは

xainome

xainome

データサイエンティスト風味のSES
自身の話をするよりは人の話を聞く方が好き
普通の人

FOLLOW

カテゴリー:
タグ:
関連記事

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


Social Media Auto Publish Powered By : XYZScripts.com