321 Views
March 22, 25
スライド概要
Deep learningの学習がどのような仕組みで進むのかを、数学知識をなるべく使わないように説明してみました。
図多めにして流し見しやすくしています
ニューラルネットをGPU向けに最適化するお仕事をしています
Deep Learningの基礎 ~プログラムが学習する仕組み~ 順伝播: 現在の𝑾, 𝒃をもとに、出力を計算。Forward propagationとも。 W,bを更新 逆伝播: 現在の𝑾, 𝒃をもとに、出力を計算。Backpropagation。 𝟏 𝟏 𝚫𝒃𝟐 𝟐 𝟏 𝚫𝒃 𝟏 𝚫𝒙 𝚫𝒙 𝚫𝑾 𝜟𝒙𝟐 𝚫𝒙 𝚫𝑾 ×𝒙 4.2 +4.2 5.1 -5.1 6.5 - 6.1 -6.1 5.0 - 5.3 -5.3 5.8 -5.8 6.2 5.0 6.0 6.5 5.0 × 𝑾𝟏 - 6.2 -5.0 -6.0 𝚫𝑾𝟑 𝚫𝒙𝟐 𝚫𝒃𝟑 𝚫𝒑 +4.2 4.2 +4.2 +4.2 4.2 +4.2 +4.2 - 5.1 5.1 -5.1 - 5.1 5.1 -5.1 - 5.1 - 6.5 6.5 -6.5 - 6.5 6.5 -6.5 - 6.5 - 6.1 6.1 -6.1 - 6.1 6.1 -6.1 - 6.1 - 5.0 5.0 -5.0 - 5.0 5.0 -5.0 - 5.0 5.3 -5.3 - 5.3 5.3 -5.3 - 5.8 5.8 -5.8 - 5.8 5.8 -5.8 - 6.2 - 6.2 6.2 ×1 - 5.3 6.2 - 5.0 - 6.0 × 𝒙𝟏 × 𝑾𝟐 - 6.2 ×1 5.0 -5.0 - 5.0 6.0 -6.0 - 6.0 × 𝒙𝟐 × 𝑾𝟑 - 6.2 5.0 -5.0 6.0 -6.0 ×1 - 5.3 - 5.8 - 6.2 - 5.0 1/n - 6.0
はじめに 最近、ニュースの話題がAI一色 ➢特に生成系AIと呼ばれる連中 • ChatGPT • 画像生成 実は“AI”は結構ざっくりしたくくり ➢定義によっては、電卓もAI 昨今話題になっているAIは、 Machine Learning、その中でも Deep Learningという技術をベースにした物 AI Machine Learning Deep Learning Chat GPT 本ゼミでは、こいつを勉強していきます 画像 生成 2
Deep Learning 勉強会 第1回 プログラムが自分で学習する仕組み 3
今日のもくじ • ルールベースプログラムの限界 • 自己学習型プログラム -- Machine Learningの着想 • ニューラルネットの登場 • 学習手法:勾配降下法 • ディープラーニング 4
ルールベースプログラムの限界 5
AIって、普通のプログラムとどう違うの? まず大前提として、AIはプログラムの一種 ➢でも、AIはかなり異質なジャンルではある 違いを正しく捉えるため、 “プログラム”とは何なのかを再確認しよう 🤔そもそもプログラムって一言で言うと? 6
プログラムとは、コンピュータへの命令書 コンピュータ ➢厳密な命令書を渡すと、その通りにこなす機械 ➢この命令書がプログラム 平均値を求めよ [10,20,30,40] 1. 合計する 2. 4で割る プログラマー ➢人がしてきた作業の内容を命令書に落とし込み、 # 平均値をもとめるプログラム 代わりにやってもらうお仕事 input = [10, 20, 30, 40] ✅ある作業を人間がする時の思考過程を、 細かく書き下しているだけ goukei = 0 i = 0 while i < 4: goukei = goukei + input[i] i = i + 1 ➢逆に言えば、思考過程が説明しにくい事は、 heikin = goukei / 4 プログラム化するのも困難 return heikin 7
試しに、手書き数字を分類するプログラムを書いてみよう 人が書いた0-9の数字を自動分類したい 前提(テキトー) • 8x8のpixelアート • 各pixelは0か1 • 0なら白、1なら黒 • 入力としては8x8の二次元配列 さあ、プログラムを書いてみよう! 0 1 2 3 4 5 6 7 8 9 まずは、人間が分類する時の思考過程を… 8
あれ、なんか難しいな…… Q. なんで難しい? A. 正に、思考過程を説明しにくいから ➢人が無意識にやってる領域に近いタスク 普段なんとなく判断しているが、 論理的に導出してるわけではない 輪っかが2つあったら 8とか… いや輪っかって どう説明すんだよ 4回折れたら2やな 5だって同じだろボケ ➢視覚的なタスクは特にその傾向あり 自分でもどうやってるかわからないのに 命令書なんて作れない! 9
がんばって思考過程を説明できたとしても… 手書きのランダム性に対応しきれない • 形のバリエーション • 書き損じによるノイズ • 回転 etc. ➢人が考えたロジックを書き下す、 従来通りの手法では限界がある 僕らの考えたさいきょうの “0の定義” 1. 左右対称 2. を直線で結んだ形 じゃあこれは? これどうすんの? これとかもさ~ 🤔根本的にアプローチを変える必要性 え… あ… お前どっちの味方だよ 10
自己学習型プログラム Machine Learningの着想 11
そもそも人間はどうやって見分けてる? 人間は長い年月をかけ、 大量の“数字”を見てきている 膨大な具体例から、それらに共通する 本質的に重要なパターンを徐々に学習 🤔プログラムでも再現できないか? たとえば... 1 2 3 1 2 3 12
こんなプログラムがあったらいいのに(妄想) 学習可能なプログラム! 1. 大量の画像と答えを用意 2. プログラムが以下を反復 1. 推論フェーズ 1. 何らかのロジックで、何の数字か推測 2. 答え合わせ 学習 if dot[1][3]: return 1 else: return 0 if dot[1][3] and !dot[2][2]: return 1 else: return 0 2. 学習フェーズ 1. 間違えたら、次は正解に近づくよう、 プログラム自身を書き換える 3. 間違えなくなったら完成! 0 1 0 1 13
自己学習型プログラムの難しさ 🤔そもそも何をどう書き換える? • if-elseの追加? • for ループでも追加する? 自己学習プログラム 🤔着実に賢くなるように学習できる? • 正解に近づく保証のある書き換え方針はあるの? • ランダムに書き換えてもいいけど、時間がかかりすぎる if dot[1][3] and !dot[2][2]: return 1 else: return 0 • cf) 遺伝的アルゴリズム 💡逆に言えば、こんなプログラムなら良いのでは? 1. 書き換える場所がはっきりしている 2. 正解に近づく保証のある学習方針が、理論的に求まる 0 1 14
こんなプログラムはどうだろう? 描くのめんどくさすぎたので、 ここから4x3マスのpixel絵で… 画像が何の数字か、確率で求める! 1. 画像のpixelを1列に並べる 2. 黒を1, 白を0とした数字列に変換 3. これに適当な数を掛け算&足し算 1列に並べる 𝒙𝟎 𝒙𝟏 𝒙𝟐 𝒙𝟐 𝒙𝟒 𝒙𝟓 𝒙𝟔 𝒙𝟕 𝒙𝟖 𝒙𝟗 𝒙𝟏𝟎 𝒙𝟏𝟏 𝒙 1 1 1 1 0 1 1 0 1 1 1 1 • 適当な数は、プログラムが内部で保持するパラメタ(𝑤𝑒𝑖𝑔ℎ𝑡, 𝑏𝑖𝑎𝑠) 𝑤0 𝑥0 + 𝑤1 𝑥1 + ⋯ 𝑤11 𝑥11 + 𝑏 4. できた値を、画像が“0”である確率()とする 5. 手順3と4を“0”から“9”まで実施 6. 一番、確率()が高かった数字を推測結果とする 𝒑 70 10 2 1 6 2 1 3 1 4 𝒑𝟎 𝒑𝟏 𝒑𝟐 𝒑𝟑 𝒑𝟒 𝒑𝟓 𝒑𝟔 𝒑𝟕 𝒑𝟖 𝒑𝟗 ※各数字で独立に求めるので、普通は合計100%にならない。あくまで確率っぽい値 🤔色々疑問は多いと思うけど、一旦どんな計算か具体例で理解しよう 70%の確率で “0” ! 15
具体的にプログラムの流れをなぞってみる:推論フェーズ① 𝑝0 = 𝑤0 𝑥0 + 𝑤1 𝑥1 + ⋯ 𝑤11 𝑥11 + 𝑏 1列に並べる 画像が”0”で ある確率() 1.1 1 𝑥0 𝑤0 𝑤1 𝑤2 𝑤3 𝑤4 𝑤5 𝑤6 𝑤7 𝑤8 𝑤9 𝑤10 𝑤11 1 𝑥1 1.2 -0.9 0.2 1.3 0.1 -1.3 1.2 1.3 0.4 0.3 -0.9 1.1 𝑏0 0.8 𝑝0 1 𝑥2 1 𝑥3 0 𝑥4 1 𝑥5 1 𝑥6 0 𝑥7 1 𝑥8 1 𝑥9 1 𝑥10 1 𝑥11 𝒙 ※数字はテキトー。整合性取れてないです… 16
具体的にプログラムの流れをなぞってみる:推論フェーズ② 1列に並べる 1.2 -0.9 0.2 1.3 0.1 -1.3 1.2 1.3 0.4 0.3 -0.9 1.1 1 𝑥0 1.1 𝑏0 0.8 𝑝0 1.0 -0.4 0.5 -0.9 1.1 0.4 0.1 -1.3 0.5 1.2 1.3 0.4 1 𝑥1 -0.2 𝑏1 0.1 𝑝1 𝑤0 ′ 𝑤1 ′ 𝑤2 ′ 𝑤3 ′ 𝑤4 ′ 𝑤5 ′ 𝑤6 ′ 𝑤7 ′ 𝑤8 ′ 𝑤9 ′ 𝑤10 ′ 𝑤11 ′ 1 𝑥2 画像が”1”で ある確率() 1 𝑥3 0 𝑥4 1 𝑥5 1 𝑥6 0 𝑥7 1 𝑥8 1 𝑥9 1 𝑥10 1 𝑥11 𝒙 17
具体的にプログラムの流れをなぞってみる:推論フェーズ② この計算を式にすると、 𝒑 = 𝑾𝒙 + 𝒃 1列に並べる 1.2 -0.9 0.2 1.3 0.1 -1.3 1.2 1.3 0.4 0.3 -0.9 1.1 1 𝑥0 1.1 𝑏0 0.8 𝑝0 1.0 -0.4 0.5 -0.9 1.1 0.4 0.1 -1.3 0.5 1.2 1.3 0.4 1 𝑥1 -0.2 𝑏1 0.1 𝑝1 1.2 -0.9 0.2 1.3 0.1 -1.3 1.2 1.3 0.4 0.3 -0.9 1.1 1 𝑥2 0.3 𝑏2 1.5 𝑝2 1.0 -0.4 0.5 -0.9 1.1 0.4 0.1 -1.3 0.5 1.2 1.3 0.4 1 𝑥3 -1.4 𝑏3 1.1 𝑝3 1.2 -0.9 0.2 1.3 0.1 -1.3 1.2 1.3 0.4 0.3 -0.9 1.1 0 𝑥4 1.0 𝑏4 -0.9 𝑝4 1.0 -0.4 0.5 -0.9 1.1 0.4 0.1 -1.3 0.5 1.2 1.3 0.4 1 𝑥5 1.5 𝑏5 0.3 𝑝5 1.2 -0.9 0.2 1.3 0.1 -1.3 1.2 1.3 0.4 0.3 -0.9 1.1 1 𝑥6 -0.9 𝑏6 0.8 𝑝6 1.0 -0.4 0.5 -0.9 1.1 0.4 0.1 -1.3 0.5 1.2 1.3 0.4 0 𝑥7 -0.3 𝑏7 1.2 𝑝7 1.2 -0.9 0.2 1.3 0.1 -1.3 1.2 1.3 0.4 0.3 -0.9 1.1 1 𝑥8 0.7 -1.0 𝑝8 1.0 -0.4 0.5 -0.9 1.1 0.4 0.1 -1.3 0.5 1.2 1.3 0.4 1 𝑥9 𝑏8 0.4 𝑏9 1.0 𝑝9 𝑾 1 𝑥10 1 𝑥11 𝒙 𝒃 1.5 max 𝒑 きっとこれは「2」! 18
さて、なんでこの形??? 実はこの形、さっきの2条件を満たしてる 1. 書き換える場所がはっきりしている ➢𝑾,𝒃の値。 ➢行う演算は掛け算と足し算だけ。 それに使う係数を最適化するイメージ 2. 正解に近づく保証のある学習方針が、 理論的に求まる ➢ここを今から見ていくよ 19
どう書き換えたら正解に近づく? まずは、何が正解かはっきりさせよう ➢推測結果が “0”であること? ➢🤔もう少し情報量を増やしたい ➢推測結果より少し手前の、𝒑に着目 理想の𝒑に極力近い𝒑を出す事を正解とする ➢理想の決め方は色々あるが、とりま右下図 𝒑 0.8 0.1 🤔さて、𝒑を理想の𝒑に近づけるには? ➢最終的に𝑾, 𝒃をどう書き換えるべきか知りたい ➢分かるところから順番に行こう! 1.5 1.1 -0.9 0.3 0.8 1.2 -1.0 1.0 理想の𝒑 𝑝0 𝑝1 𝑝2 𝑝3 𝑝4 𝑝5 𝑝6 𝑝7 𝑝8 𝑝9 5 -5 -5 -5 0だけ高くて、 他は低い -5 -5 -5 -5 -5 -5 20
どう書き換えたら理想のpに? ~まずはpの変化量~ まず、𝒑が変化すべき量は簡単 ➢理想の𝒑から実際の𝒑を引くだけ 𝒑が変化すべき量 𝚫𝒑 が求まる ➢ただ、𝒑はあくまで𝑾, 𝒃, 𝒙から生じた値 ➢知りたいのは、𝑾, 𝒃が変化すべき量 ➢では、𝒑を𝚫𝒑だけ増やすために、 𝑾, 𝒃をどう変えたらいい? 𝒑 = 𝑾𝒙 + 𝒃 理想の𝒑 𝒑 𝚫𝒑 5 0.8 +4.2 -5 0.1 - 5.1 -5 1.5 - 6.5 -5 1.1 - 6.1 -5 -0.9 - 4.1 -5 0.3 - 5.3 -5 0.8 - 5.8 -5 1.2 - 6.2 -5 -1.0 - 4.0 -5 1.0 - 6.0 21
どう書き換えたらいいの? ~次はbの変化量~ 一旦、𝑾を固定して考える 𝒃は𝒑と完全に連動してる ➢ 𝒃を増やせば𝒑も増える。逆も同じ ✅𝒃は𝒑と同じ方向に変化させれば良さそう ➢ 𝚫𝒃 = 𝚫𝒑 🤔では、𝒃を𝚫𝒑 だけ増やせば、 𝑾はそのままで良い? ➢ これと全く同じ入力なら、それで正解できるが… ➢ 𝑾, 𝒃どちらも活かして上手く情報抽出したい ➢ 𝒃だけ賢くしても、高が知れてる🙅 ネタバレすると, 𝚫𝒃 は小さくして更新に使う 𝟏 ➢ 𝒃 ← 𝒃 + 𝜼Δ𝒃 ➢ 𝒃の変化だけでなく、𝑾の変化も併せて𝒑を理想に近づけるため 𝚫𝒃 𝚫𝒑 +4.2 +4.2 - 5.1 - 5.1 - 6.5 - 6.5 - 6.1 - 6.1 - 4.1 - 4.1 - 5.3 - 5.3 - 5.8 - 5.8 - 6.2 - 6.2 - 4.0 22 - - 4.0 6.0 - 6.0
どう書き換えたらいいの? ~最後はWの変化量~ 𝒘𝟎,𝟎 𝒘𝟎,𝟏 𝒘𝟎,𝟐 𝒘𝟎,𝟑 𝒘𝟎,𝟒 𝒘𝟎,𝟓 𝒘𝟎,𝟔 𝒘𝟎,𝟕 𝒘𝟎,𝟖 𝒘𝟎,𝟗 𝒘𝟎,𝟏𝟎 𝒘𝟎,𝟏𝟏 ひとまず𝑾の一行目だけ考える 𝑤0,0 𝑥0 + 𝑤0,1 𝑥1 + 𝑤0,2 𝑥2 + 𝑤0,3 𝑥3 + 𝑤0,4 𝑥4 … = 𝑝0 1 1 1 1 0 今、𝑝0 は増やしたい☝! • 大きい𝒙に掛かってる𝑤は沢山増やしたい ➢ 𝑝0 を効率的に増やせる • Δ𝑝𝑖 が大きい𝒑𝒊 の計算に使う𝒘は沢山増やしたい ➢ Δ𝒑𝒊 が大きい=理想の𝒑が遠いから沢山変化させたい 𝚫𝒑 +4.2 - 5.1 それを実現する式は、こう ➢Δ𝑤 = Δ𝑝𝑥 - 6.5 - 6.1 - 4.1 - 5.3 𝑊全体だと、以下の式 ➢Δ𝑾=𝚫𝒑𝒙𝑻 - 5.8 - 6.2 - 4.0 23 6.0 Δ𝑝0 Δ𝑝1 Δ𝑝2 Δ𝑝3 Δ𝑝4 Δ𝑝5 Δ𝑝6 Δ𝑝7 Δ𝑝8 Δ𝑝9
W, bの変化量の計算方法まとめ 𝒑 = 𝑾𝒙 + 𝒃 1. 画像𝒙, 現在の𝑾, 𝒃をもとに𝒑を計算 2. 理想の𝒑と差分を取り、𝚫𝒑を計算 3. 𝑾, 𝒃が変化すべき差分、𝚫𝑾, 𝚫𝒃を、 以下の式を基に計算 • 𝚫𝒃 = 𝚫𝒑 • 𝚫𝑾 = 𝚫𝒑𝒙𝐓 • (𝚫𝒙 = 𝑾𝑻 𝚫𝒑 ) 式は覚えなくても大丈夫 𝑾, 𝒙, 𝒑をコネコネすれば求まる、位で では、これを使って𝑾, 𝒃を更新しよう 𝚫𝒃 𝚫𝒑 + 4.2 + 4.2 - 5.1 - 5.1 - 6.5 - 6.5 - 6.1 - 6.1 - 4.1 - 4.1 - 5.3 - 5.3 - 5.8 - 5.8 - 6.2 - 6.2 - 4.0 - 4.0 - 6.0 24 - 6.0
実際にW, bを更新する方針 𝒑 = 𝑾𝒙 + 𝒃 1. 各画像𝒙𝒊 について𝚫𝑾𝒊 , 𝚫𝒃𝒊 を計算 2. それらの和で、𝑾, 𝒃を少しずつ更新 𝟏 𝜼 𝟏 𝑾𝒏𝒆𝒘 = 𝑾 − σ𝒊 𝜟𝑾𝒊 𝜼 • 𝒃𝒏𝒆𝒘 = 𝒃 − σ𝒊 𝚫𝒃𝒊 • ※ 𝜼 : 学習率 (𝑾, 𝒃を一度に更新する量を調節) 3. 1に戻って繰り返す ✅全部の学習画像をうまく解釈する𝑾, 𝒃に近づく 上記の方針を、バッチ勾配降下法と呼ぶ 𝚫𝒃 𝚫𝒑 + 4.2 + 4.2 - 5.1 - 5.1 - 6.5 - 6.5 - 6.1 - 6.1 - 4.1 - 4.1 - 5.3 - 5.3 - 5.8 - 5.8 - 6.2 - 6.2 - 4.0 - 4.0 - 6.0 25 - 6.0
これって理想のpに近づく保証あるか?と思ったアナタ その直感はとても正しいです 今説明したアルゴリズムは、 理想の𝒑に近づきやすい、程度のもの 𝟏 𝜼 𝟏 𝑾𝒏𝒆𝒘 = 𝑾 − 𝜼 σ𝒊 𝜟𝑾𝒊 • 𝒃𝒏𝒆𝒘 = 𝒃 − σ𝒊 𝚫𝒃𝒊 • 実際に学習を回すときにも、 • ※ 𝜼 : 学習率 理想の𝒑から遠ざかるシーンはある ちょっと頑張ってこの辺を 説明してみます 𝚫𝒃 𝚫𝒑 + 4.2 + 4.2 - 5.1 - 5.1 - 6.5 - 6.5 - 6.1 - 6.1 - 4.1 - 4.1 - 5.3 - 5.3 - 5.8 - 5.8 - 6.2 - 6.2 - 4.0 - 4.0 - 6.0 26 - 6.0
学習を別角度から解釈してみる ~損失地形という考え方~ 𝒑 = 𝑾𝒙 + 𝒃 学習は、 理想の𝒑を作れる𝑾, 𝒃を探すゲーム ➢どこかにbestな𝑾, 𝒃はある ※簡単のために、𝑝 = 𝑤𝑥を例に。 𝜟𝒑 (低いほど良い) 0.8 網羅的に𝑾, 𝒃を変えて𝒑を測っていけば、 bestは見つけられる 0.6 • イメージとしては、右のグラフが作れる 0.4 • 𝑤 = 1.0がbest. • こういうグラフを損失地形と呼んだりする 0.2 • 😢けど、手間がかかりすぎる • さっきの例ですら、𝑾の中に、𝑤は60個もある • 全てを網羅的に変えて𝒑を計算するのは無理… 𝑶 0.2 0.4 0.6 0.8 1.0 27 1.2 𝑤
学習を別角度から解釈してみる ~損失地形という考え方~ 𝒑 = 𝑾𝒙 + 𝒃 1. ひとまず、適当な𝑾, 𝒃を用意 2. 𝑾, 𝒃が変化すべき差分、𝚫𝑾, 𝚫𝒃を、 以下の式を基に計算 • 𝚫𝒃 = 𝚫𝒑 • 𝚫𝑾 = 𝚫𝒑𝒙𝐓 • (𝚫𝒙 = 𝑾𝑻 𝚫𝒑 ) ※簡単のために、𝑝 = 𝑤𝑥を例に。 理想の𝑝との差 (低いほど良い) 0.8 w増やせば よさそう… 0.6 0.4 ➢ この式は、今の𝑾, 𝒃の直近の範囲で、 どの方向に変化させれば𝚫𝒑が減るかを求めてる 0.2 ➢ 見えない損失地形の一点を覗いてるイメージ 𝑶 0.2 0.4 0.6 0.8 1.0 1.2 𝑤 今のwの値 28
学習を別角度から解釈してみる ~損失地形という考え方~ 𝒑 = 𝑾𝒙 + 𝒃 1. 各画像𝒙𝒊 について𝚫𝑾𝒊 , 𝚫𝒃𝒊 を計算 2. それらの和で、𝑾, 𝒃を少しずつ更新 理想の𝑝との差 (低いほど良い) 𝟏 𝜼 𝟏 𝑾𝒏𝒆𝒘 = 𝑾 − σ𝒊 𝜟𝑾𝒊 𝜼 • 𝒃𝒏𝒆𝒘 = 𝒃 − σ𝒊 𝚫𝒃𝒊 • ※簡単のために、𝑝 = 𝑤𝑥を例に。 ※ 𝜼 : 学習率 (𝑾, 𝒃を一度に更新する量を調節) 0.8 0.6 𝑾, 𝒃をどの方向に変えるかは、 𝚫𝑾, 𝚫𝒃で求めてある 0.4 ✅その方向にどれだけ大きく変えるかを決めるのが学習率 0.2 そして𝑾, 𝒃更新したら、 また𝚫𝑾, 𝚫𝒃を計算して損失地形を覗く 𝑶 ➢ そのため、更新のたびに理想の𝒑に近づく保証はない 0.2 0.4 0.6 今のw 0.8 1.0 1.2 次のw この歩幅を学習率で調整29 𝑤
本当にこれで学習できるのか、実験で確かめよう • MNIST dataset ➢公開されてる手書き数字の画像集 ➢学習用に60000枚 ➢テスト用に10000枚 • 実際にプログラム作って 学習してみた ➢前ページとほぼ同じ計算で学習した 最終的に、テスト用の10000枚の うち、80%は当てられるように! 30
性能向上の工夫 “Deep” Learning 31/n
線形変換の表現能力の限界 𝒑 = 𝑾𝒙 + 𝒃 • 勾配降下法を得た今、この式で表せる範 囲なら、最適()なものを探索できる! 🤔だが、この式で表せるのは “一次関数”的な関係性だけ ➢ 入力と判断結果が比例するような パターンには強い☺ イメージ 𝒑 o 😢些細な差で急に判断を変えるのが苦手 𝒙 まあ、5かな… 5だね 絶対に5 イメージ 𝒑 一工夫して小回りを利かせたい🤔 絶対に5 o 𝒙 絶対に5 絶対に6 32
活性化関数で、もっと小回りの利くプログラムに! 𝒑 = 𝑨𝒄𝒕(𝑾𝒙 + 𝒃) 線形変換した後、非線形な変換を噛ませる ➢ 活性化関数(activation func.) 代表的なのはReLU関数 𝑥 (𝑥 ≥ 0) 𝑅𝑒𝐿𝑈 𝑥 = ቊ 0 (𝑥 < 0) 𝒑 o 𝒙 ✅些細な差による違いに敏感になった 33
ちなみに、ReLUがあっても学習はできるの? 𝒑′ = 𝑾𝒙 + 𝒃 𝒑 = 𝑹𝒆𝑳𝑼(𝒑′) 𝑾 できます! 流れとしては、 1. 𝒑と理想の𝒑から、 𝚫𝒑を計算 2. 𝚫𝒑の要素のうち、 𝒑で0だった箇所を、 0で埋めたものが𝚫𝒑′ ➢ 𝒑の値がいくつでも、 影響を与えてないから 𝒑′ ReLU 𝒑 𝒃 1.2 -0.9 0.2 1.3 0.1 -1.3 1.2 1.3 0.4 0.3 -0.9 1.1 1.0 -0.4 0.5 -0.9 1.1 0.4 0.1 -1.3 0.5 1.2 1.3 0.4 1.2 -0.91.2 0.2-0.9 1.30.2 0.11.3 -1.30.1 1.2-1.3 1.31.2 0.41.3 0.30.4 -0.90.3 1.1-0.9 1.0 0.8 1.1 0.8 -0.2 𝚫𝒃 0.1 𝚫𝒑′ 0.1 1.1 0.3 4.2 1.5 +4.2 1.5 +4.2 -0.41.0 0.5-0.4 -0.90.5 1.1-0.9 0.41.1 0.10.4 -1.30.1 0.5-1.3 1.20.5 1.31.2 0.41.3 0.4 -1.4 5.1 1.1 -5.1 1.1 -5.1 1.2 -0.91.2 0.2-0.9 1.30.2 0.11.3 -1.30.1 1.2-1.3 1.31.2 0.41.3 0.30.4 -0.90.3 1.1-0.9 1.1 1.0 6.5 -0.9 -6.5 0 -6.5 1.0 -0.41.0 0.5-0.4 -0.90.5 1.1-0.9 0.41.1 0.10.4 -1.30.1 0.5-1.3 1.20.5 1.31.2 0.41.3 0.4 1.5 6.1 0.3 -6.1 0.3 -6.1 1.2 -0.91.2 0.2-0.9 1.30.2 0.11.3 -1.30.1 1.2-1.3 1.31.2 0.41.3 0.30.4 -0.90.3 1.1-0.9 1.1 -0.9 0 0.8 0 0.8 -5.0 -0.3 5.3 1.2 -5.3 1.2 -5.3 0.7 5.8 -1.0 -5.8 0 -5.8 0.4 6.2 1.0 -6.2 1.0 -6.2 1.0 -0.41.0 0.5-0.4 -0.90.5 1.1-0.9 0.41.1 0.10.4 -1.30.1 0.5-1.3 1.20.5 1.31.2 0.41.3 0.4 1.2 -0.91.2 0.2-0.9 1.30.2 0.11.3 -1.30.1 1.2-1.3 1.31.2 0.41.3 0.30.4 -0.90.3 1.1-0.9 1.1 1.0 -0.41.0 0.5-0.4 -0.90.5 1.1-0.9 0.41.1 0.10.4 -1.30.1 0.5-1.3 1.20.5 1.31.2 0.41.3 0.4 1.2 -0.9 0.2 1.3 0.1 -1.3 1.2 1.3 0.4 0.3 -0.9 1.1 1.0 -0.4 0.5 -0.9 1.1 0.4 0.1 -1.3 0.5 1.2 1.3 0.4 0 6.0 𝚫𝑾 ×1 𝚫𝒑 0 -5.0 -6.0 -6.0 ×𝑥 𝑇 3. 𝚫𝒑′を基に𝚫𝑾, 𝚫𝒃を計算 34
層を重ねて!もっと複雑な関数へ 𝒑 = 𝑹𝒆𝑳𝑼(𝑾𝒙 + 𝒃) 少し複雑なプログラムを表せるようになった 🤔もっと表現能力を上げたい ※構造のシンプルさは維持しつつ 💡上の式を重ね掛けすれば良いのでは? … ➢𝒙1 = 𝑹𝒆𝑳𝑼 𝑾𝟏 𝒙 + 𝒃𝟏 ➢𝒙2 = 𝑹𝒆𝑳𝑼 𝑾𝟐 𝒙𝟏 + 𝒃𝟐 ➢… ➢𝒑 = 𝑹𝒆𝑳𝑼 𝑾𝒏 𝒙𝒏−𝟏 + 𝒃𝒏 😆層を重ねるほど表現能力が上がる! 🤔学習はどうすればいい? 35
誤差逆伝播法 Backpropagation 最後の𝒑に近い方から、𝚫𝑾, 𝚫𝒃を求めていく • 最後の層 • 𝚫𝒃𝟑 + 4.2 = 𝚫𝒑 𝚫𝒙𝟐 𝚫𝒃𝟑 𝚫𝑾𝟑 - 5.1 𝟐𝐓 • 𝚫𝑾𝟑 = 𝚫𝒑𝒙 𝑻 𝟐 𝟑 • (𝚫𝒙 = 𝑾 𝚫𝒑 ) ➢ これを起点に、前の層の計算ができる - 6.5 - 6.1 - 4.1 - 5.3 × 𝒙𝟐 - 6.2 • 最後の一つ手前の層 4.2 +4.2 +4.2 5.1 5.1 - - 5.1 6.5 -6.5 - 6.5 6.1 -6.1 - 6.1 5.0 -5.0 - 5.0 5.3 -5.3 5.8 - 5.8 𝚫𝒑 -5.8 6.2 × 𝑾𝟑 - - 5.3 ×1 - 5.8 - 6.2 6.2 5.0 5.0 - - 5.0 6.0 -6.0 - 6.0 - 4.0 - 6.0 • 𝚫𝒃𝟐 = 𝚫𝒙𝟐 𝐓 • 𝚫𝑾𝟐 = 𝚫𝒙𝟐 𝒙𝟏 • (𝚫𝒙𝟏 𝚫𝒙𝟏 𝚫𝒃𝟐 𝚫𝑾𝟐 𝑻 𝟐 = 𝑾 𝚫𝒙𝟐 ) 後ろから伝播するように、更新量が求まる! 4.2 4.2 4.2 5.1 5.1 5.1 6.5 6.5 6.5 6.1 6.1 6.1 5.0 5.0 5.0 5.3 5.3 ×1 5.3 5.8 5.8 6.2 6.2 6.2 5.0 5.0 6.0 6.0 5.8 × 𝒙𝟐 𝚫𝒙𝟐 × 𝑾𝟑 36 5.0 6.0
学習のサイクルを最後に図で捉えましょう 順伝播: 現在の𝑾, 𝒃をもとに、出力を計算。Forward propagationとも。 W,bを更新 逆伝播: 現在の𝑾, 𝒃をもとに、出力を計算。Backpropagation。 𝟏 𝟏 𝚫𝒃𝟐 𝟐 𝟏 𝚫𝒃 𝟏 𝚫𝒙 𝚫𝒙 𝚫𝑾 𝜟𝒙𝟐 𝚫𝒙 𝚫𝑾 ×𝒙 4.2 +4.2 5.1 -5.1 6.5 - 6.1 -6.1 5.0 - 5.3 -5.3 5.8 -5.8 6.2 5.0 6.0 6.5 5.0 × 𝑾𝟏 - 6.2 -5.0 -6.0 𝚫𝑾𝟑 𝚫𝒙𝟐 𝚫𝒃𝟑 𝚫𝒑 +4.2 4.2 +4.2 +4.2 4.2 +4.2 +4.2 - 5.1 5.1 -5.1 - 5.1 5.1 -5.1 - 5.1 - 6.5 6.5 -6.5 - 6.5 6.5 -6.5 - 6.5 - 6.1 6.1 -6.1 - 6.1 6.1 -6.1 - 6.1 - 5.0 5.0 -5.0 - 5.0 5.0 -5.0 - 5.0 5.3 -5.3 - 5.3 5.3 -5.3 - 5.8 5.8 -5.8 - 5.8 5.8 -5.8 - 6.2 - 6.2 6.2 ×1 - 5.3 6.2 - 5.0 - 6.0 × 𝒙𝟏 × 𝑾𝟐 - 6.2 ×1 5.0 -5.0 - 5.0 6.0 -6.0 - 6.0 × 𝒙𝟐 × 𝑾𝟑 - 6.2 5.0 -5.0 6.0 -6.0 ×1 - 5.3 - 5.8 - 6.2 - 5.0 37/n - 6.0
本当に層を増やせば性能が上がるのか、実験で確かめよう • MNIST dataset • 層を3つに増やして学習 • 条件は1層の時とほぼ同じ ※層が多いと生じる問題を緩和する工夫を少し • 最終的に、テスト用の10000枚のうち、 86%は当てられるように! ➢ 1層より6%up 38
まとめ(すんませんもう3ページだけ続きます) 😢思考過程が曖昧なタスクは、通常のプログラムでは書きにくい 🤔人間のように、大量のデータから学習するプログラムが欲しい 💡データをバラバラに分解、掛け算と足し算で答えを作るプログラム ➢掛ける数𝑾、足す数𝒃を、学習によって最適化 ✅今回は画像を分類したが、タスクは何でも問題ない ✅重要なのは、以下の2つ 1. 入力データと、それに対応する出力の正解データが大量にあること 2. 入力と出力、どちらも何らかの数値の列に変換できること 39/n
最後に、Deep Learning でよく出る用語と概念を 40/n
Deep Neural Network • 右の計算を、 よく下の図で表す • 辺:𝑾 • 丸:𝒙 この見た目から、 (Deep) Neural Networkという (層が多いときはDeepが付く) 𝒙𝟏 𝒙𝟐 𝒑 41
Neural Networkにもバリエーションがたくさんある 今回のは一番基礎的な、 Feed Forward Networkという種類 ➢ある層の全ての丸が、次の層の全てと接続 ➢この層を、全結合層(Fully Connected Layer)という ➢全結合層だけでできたNetworkが、Feed Forward 𝒙𝟏 𝒙𝟐 𝒑 この繋げ方を変えることで、様々な能力を持つ ➢他のバリエーションはまた次回以降で。 42/n
ちなみになる話 2024年のノーベル物理学賞は変わった人が受賞 ➢Geoffrey Hinton & John Hopfield AI分野への多大な貢献をたたえて授賞 物理学と関係ない分野から選ばれるのは前代未聞 実はこのHinton氏がbackpropagationを提唱* ※厳密には、backpropの概念自体は前からあったが、 ニューラルネットに導入したのは彼が初 43
おしまい 長々とお付き合いくださりどうもでした ありがとー 44/n