Pythonで学ぶ画像生成
https://github.com/py-img-gen/python-image-generation
本書の前提
序章
第1章 画像生成とは?
第1節 画像生成の概要
第2節 テキストからの画像生成
第3節 画像生成技術の進歩による弊害
コラム:すべてを救うPythonの型ヒント
第2章 深層学習の基礎知識
第1節 深層学習の概要
-
教師あり学習 (Supervised Learning)
- 機械学習の3分類: 教師あり学習、教師なし学習、強化学習
- 教師あり学習 = 人間が事前に正解ラベルをつけたデータで学習する方法
- 「教師」とは正解ラベルのこと。学習中に人間が判定するわけではない
- 分類問題 (Classification) と回帰問題 (Regression) に分かれる
-
パーセプトロン
入力を受け取って「こっち」か「あっち」かを判定する、最もシンプルなモデル。 ニューラルネットワークの基礎。
-
特徴ベクトル x = [x₁, x₂]ᵀ
- x₁, x₂ はそれぞれ ただの数値1つ (スカラー)
- 例: x₁ = 0.7(体の丸さ), x₂ = 0.3(毛の長さ)
- それらを束ねたものが特徴ベクトル
- ᵀ(転置)は「横に書いてるけど本当は縦ベクトルですよ」の印
- 添え字番号 (x₁, x₂, …) を使う理由: 特徴が何百個になっても x, y, z… ではアルファベットが足りないから
- 高校数学の (x, y) と x₁, x₂ は同じもの
- x₁, x₂ はそれぞれ ただの数値1つ (スカラー)
-
記法メモ
-
f(x; w, b) のセミコロン
- セミコロンの左: 入力(画像ごとに毎回変わる)
- セミコロンの右: パラメータ(学習で決まる設定値)
- 全部カンマだと同じ立場に見えるため、役割の違いを区切っている
- 高校数学には出てこない。大学の統計学・機械学習で一般的な表記
-
x ∈ ℝᴰ の意味
- ∈ は「〜に属する」
- ℝ は実数 (real number)
- ℝᴰ は「実数が D 個並んだもの」= D 次元ベクトルの世界
- つまり「x は実数 D 個の組ですよ」という型宣言のようなもの
- 特徴1つ = 1次元。特徴が D 個あれば D 次元ベクトル
-
-
パーセプトロンの計算 [式2.1〜2.3]
計算の中身はシンプル:
x₁ × w₁ + x₂ × w₂ + b 具体例: 0.7 × 0.5 + 0.3 × (-0.4) + 0.1 = 0.33- w(重み): 各特徴をどれくらい重視するか
- b(バイアス): 全体の調整値
- 結果 > 0 → 犬 (ŷ = 1)、結果 ≤ 0 → 猫 (ŷ = 0)
式[2.1], [2.2], wᵀx + b はすべて同じ計算の表記違い。
-
決定境界 (Decision Boundary)
- D 次元空間に引かれる境界
- 2次元 → 直線
- 3次元 → 平面
- 4次元以上 → 超平面 (hyperplane)
- 数式は次元がいくつでも wᵀx + b = 0 で同じ
- 人間には4次元以上を図示できないが、計算上は何も変わらない
- D 次元空間に引かれる境界
-
学習の流れ (図2-2)
人間がやること = 学習前に正解ラベルつきの訓練データを用意するだけ。 パーセプトロンが自動でやること = 以下の(1)〜(4)のループ。
- 初期化: 重みとバイアスをランダムな値で設定
- 入力と予測: 画像を特徴ベクトルに変換し、計算して犬 or 猫を予測
- 正解と比較: 予測を正解ラベルと比較 → 間違いの度合いが損失 (Loss)
- パラメータ更新: 誤差を逆伝播して重みとバイアスを少し修正
これを大量のデータで繰り返すと、徐々に正しく分類できるようになる。
比喩: 人間は「問題集と答え」を作る人、パーセプトロンは問題集で自習する生徒。
-
パーセプトロンの限界(2つ)
-
特徴ベクトルを人間が設計しないといけない
- 何を特徴にするかの選択は自明でない
- この試行錯誤 = 特徴量エンジニアリング (Feature Engineering)
- → 深層学習が特徴抽出の自動化で解決
-
直線でしか分けられない(線形分離のみ)
- 線形分離可能 (Linearly Separable): 直線で分けられる → 対応可能
- 線形分離不可能 (Linearly Inseparable): 直線で分けられない → 対応不可
- → 多層パーセプトロン(非線形モデル)で解決
-
-