G検定のチートシート【最短合格】|細かい知識多め
G検定|チートシート
こんにちは、青の統計学です。
今回は、ディープラーニングG検定のチートシートをご紹介します。
より範囲を網羅した、noteの完全版チートシートはこちらをご覧ください。
https://note.com/bluestatistics/n/nbc32e0f07f1e
オートエンコーダ|auto encoder
ニューラルネットワークを用いた教師なし学習の一種で、入力データを圧縮してから再構築することを目的とするモデルです。
これにより、データの低次元表現を学習することができ、次元削減、特徴抽出、データの圧縮などに利用されます。
端的に言ってしまえば、圧縮と復元ですね。
構造は以下の2つに分けられます。
エンコーダ(Encoder):入力データを受け取り、それをより低次元の潜在表現(latent representation)に変換する。
この過程で、データの中で最も重要な情報が保存されるように学習されます。
デコーダ(Decoder):潜在表現を受け取り、元の入力データと同じ次元を持つ出力を生成する。
この出力は入力データの再構築とみなすことができるナリ。
また特徴としては、入力層と出力層の次元を同じにして、入力を再現するような出力を行わせます。
このとき、低次元の中間層ではできるだけ情報を失わないような次元圧縮が行われています。
潜在変数が標準正規分布に従っていると仮定し、よりノイズに対して頑健な深層生成モデルのVAEについての記事は以下をご覧ください。
次元を削除するといえば、主成分分析が思い浮かぶ方もいると思います。
誤認識の通り、データを特徴づける要素(分散)を抽出するという点では、主成分の抽出とエンコーダによる次元圧縮作業は似ていますね。
【python】主成分分析(+回帰)の仕組みとコード例|教師なし学習
【共線性解決!?】pythonで主成分分析(PCA)をやってみた
【線形代数】固有値や固有ベクトルは機械学習にどう使われているのか|主成分分析
オンライン学習とオフライン学習について
結構実務でも会話に出てくるのが、オンライン学習とオフライン学習です。
これを機に概要を掴んでおきましょう。
オンライン学習(Online Learning)
オンライン学習は、データが連続的に流れてくる環境で使用される学習方法です。
このアプローチでは、新しいデータが利用可能になるたびにモデルが更新されます。
特徴は以下になります。特に「新しいデータのみ」を使っているってところですね。
リアルタイムの更新:新しいデータが利用可能になると、モデルは即座にそれを学習し、自身を更新するナリ。
データのストリーミング:データが連続的にまたは小分けに供給されるナリ。大量のデータを一度に処理する必要がないナリ。
リソース効率:全データセットを一度にメモリに保持する必要がないため、メモリ効率が良いナリ。
適応性:データの変化に迅速に対応できるナリ。
使用例:株価予測、ニュースフィードのフィルタリング、オンライン広告など。
オフライン学習(Offline Learning)
オフライン学習は、あらかじめ収集された固定データセットを用いてモデルをトレーニングする方法です。
このプロセスはしばしばバッチ学習とも呼ばれており、ローカルでモデルを作ってそのモデルを使って運用を行います。
環境があまり変わらない場合に有効です。
特徴は以下の通りです。
一括処理:データセット全体を使用してモデルをトレーニングする。
計算リソース:大量のデータを一度に処理するため、計算リソースがより多く必要になることがある。
固定データセット:トレーニング中に新しいデータを取り入れないナリ。データセットは静的で変化しない。
堅牢性:一度トレーニングされたモデルは、新しいデータがない限り更新されない。
使用例:画像分類、自然言語処理、統計的分析など。
比較
データの取り扱い:オンライン学習はデータの連続的な流れを扱い、オフライン学習は一括したデータセットを使用する。
モデルの更新:オンライン学習はリアルタイムでモデルを更新するが、オフライン学習ではデータセット全体に基づいて一度にトレーニングします。
リソースの使用:オンライン学習はリソース効率が良いが、オフライン学習は大量の計算リソースを要求することがあります。
適応性と堅牢性:オンライン学習はデータの変化に迅速に対応できるが、オフライン学習は固定されたデータセットに基づいて堅牢なモデルを構築します。
ロジット変換
ロジット変換(ロジットリンク変換)は、オッズに自然対数を取ることです。
$$\frac{p}{1-p}$$
例えば、上のオッズだと0から∞の範囲を取りますが、自然対数をとると-∞から∞の範囲を取ります。
$$ln\frac{p}{1-p}$$
ロジット変換は、確率を連続的な実数のスケールに変換するために重要なのですが、何が嬉しいのでしょうか?
まず、確率的な出力を線形予測子(例えば線形回帰モデルの出力)に結びつけることができます。
特に、ロジスティック回帰では、このロジットリンク関数を使用して確率を線形モデルの出力にマッピングし、2値または3値以上のアウトカムをモデリングすることができます。
ロジットリンク関数の逆数をとると、ロジスティック関数になります。→範囲が0~1となり、確率を表せる。
$$ln\frac{p}{1-p}=β_0+β_1X_1+…+β_kX_k$$
$$\frac{p}{1-p}=exp(β_0+β_1X_1+…+β_kX_k)$$
ロジット変換は、確率的な出力を扱う際の非線形性を管理し、より柔軟で解釈しやすいモデリングアプローチを提供します。
また、確率の非対称性を考慮しており\(p\)が0に近いか1に近い極端なケースでも適切に機能します。
こちらのコンテンツが参考になるかもしれません。
決定木のgain
決定木アルゴリズムで使われているgainは情報利得が最大の分け方になるように分ける指標です。
他にもfreaquencyなどは、特徴量による分割回数をみる指標です。今回はgainについて見てみましょう。
情報利得:一つのノードの中で、異なるサンプルのクラスが含まれる割合を表したもの。
情報利得が大きければ、ノードの中が乱雑なので、枝を伸ばす必要があり、情報利得が小さければ、これ以上枝を伸ばす必要はないと判断されます。
決定木のアルゴリズムでは、過学習を防ぐために情報利得が閾値を下回る場合は剪定しています。
文字通り、決定木の層をこれ以上下に伸ばさないという意味合いです。
$$IG(D_{p})=I(D_{p})-(\sum_{j=1}^c(\frac{N_{j}}{N_{p}}))I(D_{j})$$
さて、求め方ですが、親ノードから子ノードの不純度の差で表すことができます。
\(IG(Dp)\):あるノードの情報利得
\(I(Dp)\):あるノードの不純度
\(I(Dj)\):子ノードの不純度。子ノードは1~c個あるとしています。
\(N\):サンプル数。\(N_p\)があるノードのサンプル数。\(N_j\)は子ノードのサンプル数。
不純度に関しては、エントロピーとジニ不純度のいずれかが扱われます。両者とも似ている結果が出ることが多いです。
例えば、xgboost(勾配ブースティング決定木アルゴリズム)などでは、optimizerとしてentropyかginiをパラメータとして選択ができます。
次にジニ不純度をご紹介します。
決定木のあるノードjに対し、ノード内のサンプルがN個、ノード内のクラスがC個のときを考えます。
このノード\(j\)内で、クラスiに属するサンプルの個数を\(N_j\)とすると、クラスiに属するサンプルの割合\(p(i|j)\)は、
$$p(i|j)=(\frac{N_{j}}{N})$$
と表すことができます。
この時、あるノード\(j\)のジニ不純度は以下のように表すことができます。
$$I(D_{t})=1-(\sum_{I=1}^cp(I|t)^2)$$
決定木では各ノードでの分割の決定にこれらの指標を使用します。
特に、情報利得が最大になる属性に基づいてノードを分割することで、データセットを効果的にクラス別に分類し、モデルの予測精度を向上させることができます。
モーメンタムを加えた勾配降下法について
普通の勾配降下法だと、学習率を小さくすると局所解にはまる可能性が高く、学習率が大きすぎると大域的な最適解付近を行ったり来たりしてパラメータが更新されません。
ここで、モーメンタムとは過去の勾配の「速度」や「方向性」を考慮に入れることで、パラメータの更新プロセスをスムーズにする方法です。
数学的には次のように表現されます。
$$v_t=γv_{t-1}+\eta \nabla{L(\theta)}$$
\(v_t\):時刻 \(t\)での更新量
\(γ\):モーメンタム係数(通常は0.9などの値)
\(\eta\):学習率
\nabla{L(\theta)}:コスト関数Lのパラメータ \(\theta\)に関する勾配
\(\theta\):更新されるパラメータ(重みやバイアス)
モーメンタムを使用すると、パラメータ更新が過去の勾配に影響を受け、より大きなステップで更新されることがあります。
これにより、パラメータの収束が早くなったり、局所最適解に陥りにくくなったりします。
バッチ正規化(batch normalization)
ニューラルネットワークにおけるバッチ正規化(Batch Normalization)は、訓練過程を安定させ、加速するための技術です。
この手法は、各層の入力を正規化することにより、訓練中の内部共変量シフト(Internal Covariate Shift)を減少させることができます。
正規化は色々とやり方はありますが、基本は各特徴量を平均0、分散1にします。
$$\hat{x}_i=\frac{x_i-\mu}{\sqrt{\sigma^2+ε}}$$
嬉しいこと
訓練の加速:より高い学習率を使用しても安定した訓練が可能
初期値への依存度低減:パラメータの初期値に対する依存度が低くなる
正則化効果:軽度の正則化効果があり、過学習を防ぐのに役立つ
このようにさまざまなメリットがあり、多くのモデルに適用されています。
強化学習の種類について
強化学習にはアプローチが3つほどあります。環境の特徴や目的に合わせて、アプローチを変えます。
モデルベース(Model-Based)強化学習
モデルベースの強化学習では、エージェントは環境のモデルを学習または利用して意思決定を行います。
つまり、エージェントは環境のダイナミクス(どのように状態が遷移し、報酬が与えられるか)を理解しようとします。
特徴は以下の通り
・環境のモデルを学習または既知のモデルを使用します。
・シミュレーションや予測を通じて最適な行動を計画します。
・効率的な学習が可能だが、正確なモデルの学習または構築が難しいことがあります。
方策ベース(Policy-Based)強化学習
方策ベースの強化学習では、エージェントは直接最適な行動方策(policy)を学習します。
方策は、特定の状態においてどのような行動を取るべきかを定義します。
ちょっとややこしいのですが、現時点の方策で計算した報酬の期待値と方策を見比べてどのように方策を変化させれば報酬の期待値が大きくなるかを計算します。
特徴は以下の通り
・方策(状態から行動へのマッピング)を直接最適化します。
・高い次元のアクションスペースや連続アクションに適してます。
・局所最適解に収束するリスクがあるが、単純な方策でも効果的な場合が多いです。
価値関数ベース(Value-Based)強化学習
価値関数ベースの強化学習では、エージェントは最適な価値関数を学習し、特定の状態や状態と行動の組み合わせがどの程度良いかを評価します。
価値の高い状態を訪問するように行動を選択することで、間接的に最適な方策を選ぶ方法です。
特徴は以下の通り
・状態価値関数(状態の良さを評価)や行動価値関数(特定の状態での行動の良さを評価)を学習します。
・最適な価値関数を基に、間接的に行動方策を導出します。
・価値関数の推定が難しい場合や、高次元の状態空間では学習が難しくなることがあります。
また、価値関数には大きく分けて、状態価値関数\(V(s)\)とと行動価値関数\(Q(s,a)\)に分けられます。
-状態価値関数-
状態価値関数は、ある方策\(π\)の下での状態\(s\)の期待されるリターン(報酬合計)を表します。
\(γ\)は割引率、\(R_{t+k+1}\)は時刻\(t+k+1\)での報酬、\(S_t=s\)は時刻\(t\)での状態\(s\)、\(π\)は方策です。
$$V^\pi(s) = \mathbb{E} \left[ \sum_{k=0}^{\infty} \gamma^k R_{t+k+1} \mid S_t = s, \pi \right]$$
-行動価値関数-
状態価値関数は、ある方策\(π\)の下での状態\(s\)において、行動\(a\)を取った場合の期待されるリターンを表します。
\(A_t=a\)は時刻\(t\)での行動\(a\)です。
$$Q^\pi(s, a) = \mathbb{E} \left[ \sum_{k=0}^{\infty} \gamma^k R_{t+k+1} \mid S_t = s, A_t = a, \pi \right]$$
勘のいい方は気づいたかもしれませんが、強化学習は確率過程と密接に関わっています。
以下でも少し扱っているので、覗いてみてください。
Q-learning(DQN)
また、価値関数の計算部分をニューラルネットに下請けしたアルゴリズムをDQNと呼びます。
ニューラルネットワークの入力は状態であり、出力層の各ノードは各行動の価値となります。
Q-learningは有限のマルコフ決定過程において、ある状態における最適な行動wp見つけるために使用できる手法です。
Q-learningでは、状態sにおいて行動\(a\)を実行するときの割引現在価値をQ関数の出力という形で定義します。つまり、\(R_t\)を使用すると以下のようになります。
$$Q(s_t,a_t)=max(R_{t+1})$$
Q関数を定義すると、状態\(s\)における最適な行動aは、\(Q\)関数の出力が最も高い行動ということになります。
よって、任意の状態において、最適な行動を選択する戦略\(π\)は、以下のように書けます。
$$π(s)=arg max_aQ(s_t,a_t)$$
さて、少し込み入った話になりますが時刻の概念が入ると以下のような再帰的な形にできます。
$$Q(s_t,a_t)=r+γmax(s_{t+1},a_{t+1})$$
これをベルマン方程式と呼びます。
詳しく理解したい方は、こちらもどうぞ
なぜ、\(t+1\)期の情報でt期の情報を表せるのでしょうか?
これは、経済学を学んでいると出てくる割引現在価値の考え方が必要です。
そもそもの強化学習の目的は、エージェントが得る報酬を最大化することです。
$$R=\sum_{i=1}^{n}r_i$$
このように、各エピソードで得られる報酬の総和を\(R_t\)と置いています。
難しいのが、目先の利益\(r_t\)を最大化するのではなく、時刻tから将来にわたる全体の報酬\(R_t\)を最大化する必要があります。
$$R_t=\sum_{i=t}^{n}r_i=r_t+r_{t+1}+…+r_n$$
ただ、時刻tにおいてt+1期の報酬などわかるわけないので、割引率\(γ\)をかけて報酬を割り引く必要があります。
$$R_t=\sum_{i=t}^{n}r_i=r_t+γr_{t+1}+…+γ^{n-t}r_n$$
$$R_t=\sum_{i=t}^{n}r_i=r_t+γR_{t+1}$$
時刻tにおけるQ関数\(Q(s_t,a_t)\)は、割引現在価値\(R_t\)を\(R_{t+1}\)を利用して再帰的に表せるように、時刻\(t+1\)におけるQ関数\(Q(s_{t+1},a_{t+1})\)を使って再帰的に表せます。
ベイズの定理
この定理は、事前確率と新しい証拠が得られた後の事後確率の関係を表します。
$${P(A|B)=\frac{P(B|A)P(A)}{P(B)}}$$
具体例を通してみてみましょう。
ここでの目的は、医療検査でコロナ陽性となった場合に、実際にコロナに罹患している確率(事後確率)を計算することです。
まず、以下の条件を設定します。
- コロナの有病率(事前確率): 1% の人がコロナウィルスを持っているとします。
- 検査の感度(真陽性率): 検査がコロナを正確に検出する確率は 99% です。
- 検査の特異性(真陰性率): 検査がコロナでないことを正確に示す確率は 95% です。
問題設定
- 有病率(事前確率): $${P(コロナ)=0.01}$$
- 検査の感度(真陽性率): $${P(陽性∣コロナ)=0.99P(陽性∣コロナ)=0.99}$$
- 検査の特異性(偽陽性率の補数):$${ P(陰性∣健康)=0.95P(陰性∣健康)=0.95}$$
p値の計算
偽陽性率(1から特異性を引いた値)
$${(P(陽性∣健康)=1−0.95=0.05P(陽性∣健康)=1−0.95=0.05})}$$
ベイズの定理の利用
患者が検査で陽性となった場合、実際に病気である確率 $${P(コロナ∣陽性)}$$ を求めます。
$${P(コロナ|陽性)=\frac{P(陽性|コロナ)P(コロナ)}{P(陽性)}}$$
ここで、$${P(陽性)}$$ は全体の陽性率で、これは全人口に対するコロナの人と健康な人が陽性となる確率の合計です。
$${P(陽性)=P(陽性∣コロナ)×P(コロナ)+P(陽性∣健康)×P(健康)P(陽性)}$$
$${P(陽性)=(0.99×0.01)+(0.05×0.99)=0.0099+0.0495=0.0594}$$
最終的に事後確率は結構低いことがわかりました。
セカンドオピニオンって大事ですね。
$${P(コロナ|陽性)=\frac{0.0099}{0.0594}\risingdotseq0.1667}$$
以下の記事でベイズの定理の導出は扱っています。
G検定を控えた、終えた皆様へ
G検定等で汎用的な知識をつけた皆様は、機械学習の具体手法や深層学習の裏側のアルゴリズム、そして分析の評価の仕方など多くのことを理解できていると思います。
多くの人は、データサイエンスの力を仕事に活かしたい、IT企業に勤めたい、DS職につきたいと考えているでしょう。
ただ、データサイエンティストや機械学習にふれるマーケターなどは上のような手法「HOWの部分」を理解しているだけではいけません。
①現状の課題は何が原因で起きているのか
②ゴールに辿り着くために、現状足りないものは何か?
③そのために必要な手法(HOW)は何か?
という順番で、初めて皆様の知識は生かされます。
業界業務によって課題は様々ですが、どうしてもデータサイエンスを学習したばかりだと「提案するHOWがデータサイエンス系になりがち」です。
データサイエンスで何か課題を解決したい気持ちは本当にとてもとてもとてもわかるのですが、HOWから考えてはいけません。
「案外ルールベースで、分岐させたほうがデリバリーが早くて要求が満たされる」とか
「リスティング広告の入札戦略自体はすでに最適化されていて、事業側でやることは遷移先のLPの磨き込みだった」
「複雑な重回帰分析で予測モデルを作ったが、代理店の提出した単純な割り算によってできた係数を使ったほうが精度が高い」など
課題をよくみて、ヒアリングを重ねると案外簡単な方法で物事はうまく行ったりするものです。
今回学んだG検定の知識は、無駄になるわけではありません。
例えば、現在話題になっている生成AIの裏側を理解する一助になるでしょうし、実際データサイエンスを使った案件も数多くあります。
ただ、「最適化ばっかり..」「正規表現をかいているだけや。。。」など、汎用的な知識は現場ではいずれ偏っていくものです。
偏っていきましょう!笑