.. _sec_softmax: ソフトマックス回帰 ================== :numref:`sec_linear_regression` では、線形回帰を導入し、 :numref:`sec_linear_scratch` でスクラッチから実装し、 さらに :numref:`sec_linear_concise` では深層学習フレームワークの高水準APIを用いて 面倒な計算を任せる方法も見た。 回帰は、\ *どれくらい?* や *いくつ?* という問いに答えたいときに 私たちが手に取る定番の道具である。 家がいくらで売れるかを予測したい、 野球チームが何勝するかを予測したい、 あるいは患者が退院するまでに何日入院するかを予測したい、 といった場合には、おそらく回帰モデルを探していることになる。 しかし、回帰モデルの中にも重要な違いがある。 たとえば、家の価格は決して負にならず、変化はしばしば基準価格に対する\ *相対的*\ なものである。 そのため、価格の対数に対して回帰するほうが有効な場合がある。 同様に、患者が病院に滞在する日数は\ *離散的な非負*\ の確率変数である。 したがって、最小二乗法も理想的な方法とは限らない。 この種のイベント発生までの時間を扱うモデリングには、 他にも多くの複雑さが伴い、それらは\ *生存分析*\ と呼ばれる専門分野で扱われる。 ここでのポイントは、圧倒することではなく、 推定には二乗誤差を最小化するだけ以上のことがあると知ってもらうことである。 さらに広く言えば、教師あり学習には回帰以上のものがたくさんある。 この節では、\ *どれくらい?* ではなく *どのカテゴリ?* に焦点を当てる *分類*\ 問題を扱いる。 - このメールは迷惑メールフォルダに入るのか、それとも受信トレイに入るのか? - この顧客はサブスクリプションサービスに申し込む可能性が高いのか、 それとも申し込まない可能性が高いのか? - この画像はロバ、犬、猫、それとも雄鶏を表しているのか? - Aston は次にどの映画を最も見そうか? - あなたは次に本のどの節を読むのか? 口語的には、機械学習の実務者は *分類* という語を、微妙に異なる2つの問題を指して使い分けている。 (i) データ例をカテゴリ(クラス)へハードに割り当てることだけに関心がある場合と、 (ii) ソフトな割り当て、すなわち各カテゴリが当てはまる確率を評価したい場合である。 この区別はしばしば曖昧になるが、その一因は、 実際にはハードな割り当てだけが重要な場合でも、 ソフトな割り当てを行うモデルを使うことが多いからである。 さらに、複数のラベルが同時に真である場合もある。 たとえば、ニュース記事がエンターテインメント、ビジネス、宇宙飛行の話題を同時に扱う一方で、 医療やスポーツの話題は扱わないことがある。 このような記事を上のカテゴリのどれか1つにだけ分類するのは、あまり役に立たない。 この問題は一般に `マルチラベル分類 `__ として知られている。 概要については :cite:t:`Tsoumakas.Katakis.2007` を、 画像へのタグ付けに有効なアルゴリズムについては :cite:t:`Huang.Xu.Yu.2015` を参照されたい。 .. _subsec_classification-problem: 分類 ---- まずは手始めに、単純な画像分類問題から始めよう。 ここでは、各入力は :math:`2\times2` のグレースケール画像である。 各画素値を1つのスカラーで表せるので、4つの特徴 :math:`x_1, x_2, x_3, x_4` が得られる。 さらに、各画像は「猫」「鶏」「犬」のいずれか1つのカテゴリに属すると仮定する。 次に、ラベルをどう表現するかを決める必要がある。 明らかな選択肢は2つある。 最も自然な発想は、整数がそれぞれ :math:`\{\textrm{dog}, \textrm{cat}, \textrm{chicken}\}` を表すように、 :math:`y \in \{1, 2, 3\}` を選ぶことだろう。 これは、そのような情報をコンピュータ上で\ *保存*\ するには非常に良い方法である。 もしカテゴリ間に自然な順序があるなら、 たとえば :math:`\{\textrm{baby}, \textrm{toddler}, \textrm{adolescent}, \textrm{young adult}, \textrm{adult}, \textrm{geriatric}\}` を予測したい場合には、これを `順序回帰 `__ 問題として扱い、 この形式のままラベルを保持することにも意味があるかもしれない。 さまざまなランキング損失関数の概要については :cite:t:`Moon.Smola.Chang.ea.2010` を、 複数のモードを持つ応答に対処するベイズ的アプローチについては :cite:t:`Beutel.Murray.Faloutsos.ea.2014` を参照されたい。 一般に、分類問題にはクラス間の自然な順序はない。 幸いなことに、統計学者たちはずっと昔にカテゴリデータを表現する簡単な方法を考案した。 それが *one-hot エンコーディング* である。 one-hot エンコーディングは、カテゴリ数と同じ成分数を持つベクトルである。 あるデータ例のカテゴリに対応する成分を1にし、それ以外の成分を0にする。 この場合、ラベル :math:`y` は3次元ベクトルとなり、 :math:`(1, 0, 0)` が「猫」、\ :math:`(0, 1, 0)` が「鶏」、\ :math:`(0, 0, 1)` が「犬」に対応する。 .. math:: y \in \{(1, 0, 0), (0, 1, 0), (0, 0, 1)\}. 線形モデル ~~~~~~~~~~ すべての可能なクラスに対応する条件付き確率を推定するには、 クラスごとに1つ、複数の出力を持つモデルが必要である。 線形モデルで分類を扱うには、出力の数だけアフィン関数が必要になる。 厳密には、最後のカテゴリは他のカテゴリの和を1から引いたものとして決まるので1つ少なくてもよいのであるが、 対称性の理由から、少し冗長なパラメータ化を使う。 各出力はそれぞれ独自のアフィン関数に対応する。 この例では、4つの特徴と3つの出力カテゴリがあるので、 重み(下付き文字付きの :math:`w`\ )を表すのに12個のスカラー、 バイアス(下付き文字付きの :math:`b`\ )を表すのに3個のスカラーが必要である。すると次のようになる。 .. math:: \begin{aligned} o_1 &= x_1 w_{11} + x_2 w_{12} + x_3 w_{13} + x_4 w_{14} + b_1,\\ o_2 &= x_1 w_{21} + x_2 w_{22} + x_3 w_{23} + x_4 w_{24} + b_2,\\ o_3 &= x_1 w_{31} + x_2 w_{32} + x_3 w_{33} + x_4 w_{34} + b_3. \end{aligned} 対応するニューラルネットワーク図を :numref:`fig_softmaxreg` に示す。 線形回帰と同様に、単層ニューラルネットワークを使う。 また、各出力 :math:`o_1, o_2, o_3` の計算はすべて入力 :math:`x_1, x_2, x_3, x_4` に依存するので、 出力層は *全結合層* とも呼べる。 .. _fig_softmaxreg: .. figure:: ../img/softmaxreg.svg Softmax regression is a single-layer neural network. より簡潔な記法として、ベクトルと行列を使う。 :math:`\mathbf{o} = \mathbf{W} \mathbf{x} + \mathbf{b}` のほうが、数学にもコードにもずっと適している。 すべての重みを :math:`3 \times 4` 行列にまとめ、バイアスは :math:`\mathbf{b} \in \mathbb{R}^3` のベクトルにまとめていることに注意されたい。 .. _subsec_softmax_operation: ソフトマックス ~~~~~~~~~~~~~~ 適切な損失関数があると仮定すれば、 :math:`\mathbf{o}` とラベル :math:`\mathbf{y}` の差を直接最小化しようとすることもできる。 分類をベクトル値回帰問題として扱うことは驚くほどうまくいく場合もあるが、 それでも次の点で不十分である。 - 出力 :math:`o_i` が、確率の振る舞いとして期待するように1に和がなる保証がない。 - 出力 :math:`o_i` が非負である保証もない。たとえ出力の和が1になっていても、1を超えない保証もない。 これらの点はいずれも推定問題を解きにくくし、外れ値に対して非常に脆弱な解になる。 たとえば、寝室の数と家を買う可能性の間に正の線形依存があると仮定すると、 豪邸を買う場合には確率が1を超えてしまうかもしれない! したがって、出力を「ぎゅっと押しつぶす」仕組みが必要である。 この目的を達成する方法はいくつもある。 たとえば、出力 :math:`\mathbf{o}` は :math:`\mathbf{y}` の汚染された版であり、 その汚染は正規分布から引いたノイズ :math:`\boldsymbol{\epsilon}` を加えることで起こると仮定できる。 言い換えると、\ :math:`\mathbf{y} = \mathbf{o} + \boldsymbol{\epsilon}` であり、 :math:`\epsilon_i \sim \mathcal{N}(0, \sigma^2)` である。 これはいわゆる `プロビットモデル `__ で、 最初に :cite:t:`Fechner.1860` によって導入された。 魅力的ではあるが、ソフトマックスと比べると、うまく機能するわけでもなく、 特に良い最適化問題にもならない。 この目的を達成する別の方法 (そして非負性を保証する方法)は、 指数関数 :math:`P(y = i) \propto \exp o_i` を使うことである。 これは確かに、条件付きクラス確率が :math:`o_i` の増加とともに増えるという要件を満たし、 単調であり、すべての確率が非負になる。 次に、各値をその和で割ることで、合計が1になるように変換できる。 この過程を *正規化* と呼ぶ。 この2つを組み合わせると、\ *ソフトマックス* 関数が得られる。 .. math:: \hat{\mathbf{y}} = \mathrm{softmax}(\mathbf{o}) \quad \textrm{where}\quad \hat{y}_i = \frac{\exp(o_i)}{\sum_j \exp(o_j)}. :label: eq_softmax_y_and_o :math:`\mathbf{o}` の最大成分が、\ :math:`\hat{\mathbf{y}}` による最もありそうなクラスに対応することに注意されたい。 さらに、ソフトマックス演算は引数の順序を保存するので、 どのクラスに最も高い確率が割り当てられたかを調べるために、ソフトマックスを計算する必要はない。 したがって、 .. math:: \operatorname*{argmax}_j \hat y_j = \operatorname*{argmax}_j o_j. ソフトマックスの考え方は :cite:t:`Gibbs.1902` にさかのぼり、そこでは物理学のアイデアが取り入れられた。 さらにさかのぼると、現代統計物理学の父であるボルツマンは、 気体分子のエネルギー状態の分布をモデル化するためにこの手法を用いた。 特に彼は、気体中の分子のような熱力学的アンサンブルにおけるあるエネルギー状態の出現頻度は、 :math:`\exp(-E/kT)` に比例することを発見した。 ここで、\ :math:`E` は状態のエネルギー、\ :math:`T` は温度、\ :math:`k` はボルツマン定数である。 統計学者が統計システムの「温度」を上げたり下げたりすると言うとき、 それは低エネルギー状態または高エネルギー状態を優先するために :math:`T` を変えることを指す。 ギブスの考えに従えば、エネルギーは誤差に対応する。 エネルギーベースモデル :cite:`Ranzato.Boureau.Chopra.ea.2007` は、 深層学習の問題を記述する際にこの見方を用いる。 .. _subsec_softmax_vectorization: ベクトル化 ~~~~~~~~~~ 計算効率を改善するために、 データのミニバッチに対して計算をベクトル化する。 次元(入力数)が :math:`d` の :math:`n` 個のデータ例からなるミニバッチ :math:`\mathbf{X} \in \mathbb{R}^{n \times d}` が与えられたとする。 さらに、出力カテゴリ数が :math:`q` あるとする。 すると、重みは :math:`\mathbf{W} \in \mathbb{R}^{d \times q}` を満たし、 バイアスは :math:`\mathbf{b} \in \mathbb{R}^{1\times q}` を満たする。 .. math:: \begin{aligned} \mathbf{O} &= \mathbf{X} \mathbf{W} + \mathbf{b}, \\ \hat{\mathbf{Y}} & = \mathrm{softmax}(\mathbf{O}). \end{aligned} :label: eq_minibatch_softmax_reg これにより、支配的な演算は行列–行列積 :math:`\mathbf{X} \mathbf{W}` に高速化される。 さらに、\ :math:`\mathbf{X}` の各行は1つのデータ例を表すので、 ソフトマックス演算自体も *行ごと* に計算できる。 つまり、\ :math:`\mathbf{O}` の各行について、すべての要素を指数化し、その後それらを和で正規化する。 ただし、大きな数に対して指数や対数を取ると数値オーバーフローやアンダーフローを引き起こす可能性があるため、 注意が必要である。 深層学習フレームワークはこれを自動的に処理してくれる。 .. _subsec_softmax-regression-loss-func: 損失関数 -------- 特徴 :math:`\mathbf{x}` から確率 :math:`\mathbf{\hat{y}}` への写像が得られたので、 この写像の精度を最適化する方法が必要である。 ここでは最尤推定に頼りる。これは、 :numref:`subsec_normal_distribution_and_squared_loss` で二乗誤差損失に確率的な正当化を与えたときに 出会ったのとまったく同じ方法である。 対数尤度 ~~~~~~~~ ソフトマックス関数はベクトル :math:`\hat{\mathbf{y}}` を与える。 これは、任意の入力 :math:`\mathbf{x}` に対する各クラスの(推定された)条件付き確率、 たとえば :math:`\hat{y}_1` = :math:`P(y=\textrm{cat} \mid \mathbf{x})` と解釈できる。 以下では、特徴 :math:`\mathbf{X}` を持つデータセットに対して、 ラベル :math:`\mathbf{Y}` は one-hot エンコーディングのラベルベクトルで表されていると仮定する。 特徴が与えられたときに、実際のクラスがモデルに従ってどれだけ起こりやすいかを調べることで、 推定値と現実を比較できる。 .. math:: P(\mathbf{Y} \mid \mathbf{X}) = \prod_{i=1}^n P(\mathbf{y}^{(i)} \mid \mathbf{x}^{(i)}). この因数分解を使えるのは、各ラベルがそれぞれの分布 :math:`P(\mathbf{y}\mid\mathbf{x}^{(i)})` から独立にサンプルされると仮定しているからである。 項の積を最大化するのは扱いにくいので、負の対数を取って、負の対数尤度を最小化する同値な問題に変換する。 .. math:: -\log P(\mathbf{Y} \mid \mathbf{X}) = \sum_{i=1}^n -\log P(\mathbf{y}^{(i)} \mid \mathbf{x}^{(i)}) = \sum_{i=1}^n l(\mathbf{y}^{(i)}, \hat{\mathbf{y}}^{(i)}), ここで、\ :math:`q` クラスにわたるラベル :math:`\mathbf{y}` とモデル予測 :math:`\hat{\mathbf{y}}` の任意の組に対して、損失関数 :math:`l` は .. math:: l(\mathbf{y}, \hat{\mathbf{y}}) = - \sum_{j=1}^q y_j \log \hat{y}_j. :label: eq_l_cross_entropy 後で説明する理由により、 :eq:`eq_l_cross_entropy` の損失関数は一般に *交差エントロピー損失* と呼ばれる。 :math:`\mathbf{y}` は長さ :math:`q` の one-hot ベクトルなので、 そのすべての成分 :math:`j` にわたる和は、1項を除いて消える。 損失 :math:`l(\mathbf{y}, \hat{\mathbf{y}})` は、\ :math:`\hat{\mathbf{y}}` が確率ベクトルである限り0以上に下から有界である。 どの成分も1より大きくないので、その負の対数は0より小さくなりえない。 :math:`l(\mathbf{y}, \hat{\mathbf{y}}) = 0` となるのは、実際のラベルを\ *確実に*\ 予測した場合だけである。 これは、有限の重み設定では決して起こらない。なぜなら、ソフトマックス出力を1に近づけるには、 対応する入力 :math:`o_i` を無限大にする(あるいは :math:`j \neq i` の他のすべての出力 :math:`o_j` を負の無限大にする)必要があるからである。 たとえモデルが出力確率0を割り当てられたとしても、そのような高い確信度での誤りは無限大の損失を招く(\ :math:`-\log 0 = \infty`\ )。 .. _subsec_softmax_and_derivatives: ソフトマックスと交差エントロピー損失 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ソフトマックス関数と対応する交差エントロピー損失は非常に一般的なので、 それらがどのように計算されるかをもう少しよく理解する価値がある。 :eq:`eq_softmax_y_and_o` を :eq:`eq_l_cross_entropy` の損失定義に代入し、 ソフトマックスの定義を使うと、次を得る。 .. math:: \begin{aligned} l(\mathbf{y}, \hat{\mathbf{y}}) &= - \sum_{j=1}^q y_j \log \frac{\exp(o_j)}{\sum_{k=1}^q \exp(o_k)} \\ &= \sum_{j=1}^q y_j \log \sum_{k=1}^q \exp(o_k) - \sum_{j=1}^q y_j o_j \\ &= \log \sum_{k=1}^q \exp(o_k) - \sum_{j=1}^q y_j o_j. \end{aligned} 何が起きているのかをもう少しよく理解するために、 任意のロジット :math:`o_j` に関する微分を考えよう。すると、 .. math:: \partial_{o_j} l(\mathbf{y}, \hat{\mathbf{y}}) = \frac{\exp(o_j)}{\sum_{k=1}^q \exp(o_k)} - y_j = \mathrm{softmax}(\mathbf{o})_j - y_j. 言い換えると、この微分は、 ソフトマックス演算で表されるモデルが割り当てた確率と、 one-hot ラベルベクトルの要素で表される実際に起こったこととの差である。 この意味で、これは回帰で見たものと非常によく似ている。 回帰では、勾配は観測値 :math:`y` と推定値 :math:`\hat{y}` の差でした。 これは偶然ではない。 指数型分布族モデルでは、対数尤度の勾配はまさにこの項で与えられる。 この事実により、実際の勾配計算は容易になる。 次に、単一の結果だけでなく、結果の分布全体を観測する場合を考える。 ラベル :math:`\mathbf{y}` には先ほどと同じ表現を使える。 違いは、\ :math:`(0, 0, 1)` のような二値成分だけを含むベクトルではなく、 :math:`(0.1, 0.2, 0.7)` のような一般的な確率ベクトルになることである。 :eq:`eq_l_cross_entropy` で損失 :math:`l` を定義するために以前使った数学は、 この場合でもそのままうまく機能する。 ただし、解釈が少し一般的になるだけである。 それは、ラベル分布に対する損失の期待値である。 この損失は *交差エントロピー損失* と呼ばれ、分類問題で最もよく使われる損失の1つである。 情報理論の基本を少し導入することで、この名前をわかりやすくできる。 要するに、これは、私たちが観測するもの :math:`\mathbf{y}` を、 予測した結果 :math:`\hat{\mathbf{y}}` に対して符号化するのに必要なビット数を測るものである。 以下でごく基本的な説明をする。情報理論の詳細については :cite:t:`Cover.Thomas.1999` または :cite:t:`mackay2003information` を参照されたい。 .. _subsec_info_theory_basics: 情報理論の基本 -------------- 多くの深層学習論文では、情報理論の直感や用語が使われる。 それらを理解するには、共通の言語が必要である。 これは生存ガイドである。 *情報理論* は、情報(データとも呼ばれる)の符号化、復号、伝送、操作の問題を扱いる。 エントロピー ~~~~~~~~~~~~ 情報理論の中心的な考え方は、データに含まれる情報量を定量化することである。 これは、データ圧縮の限界を与える。 分布 :math:`P` に対する *エントロピー* :math:`H[P]` は次のように定義される。 .. math:: H[P] = \sum_j - P(j) \log P(j). :label: eq_softmax_reg_entropy 情報理論の基本定理の1つは、分布 :math:`P` からランダムに生成されたデータを符号化するには、 少なくとも :math:`H[P]` 「ナット」が必要だと述べている :cite:`Shannon.1948`\ 。 「ナット」とは何か気になるかもしれないが、これはビットの :math:`e` を底とする符号化における対応物である。 つまり、1ナットは :math:`\frac{1}{\log(2)} \approx 1.44` ビットである。 驚き ~~~~ 圧縮と予測にどんな関係があるのか、不思議に思うかもしれない。 圧縮したいデータストリームがあると想像してみよう。 次のトークンをいつも簡単に予測できるなら、そのデータは圧縮しやすいである。 極端な例として、ストリーム中のすべてのトークンが常に同じ値を取る場合を考えよう。 それはとても退屈なデータストリームです! しかも退屈なだけでなく、予測も簡単である。 トークンが常に同じなので、ストリームの内容を伝えるために何の情報も送る必要がない。 予測しやすいものは、圧縮しやすいのである。 しかし、すべての事象を完全には予測できないなら、ときには驚くことがある。 ある事象に割り当てられた確率が低いほど、私たちの驚きは大きくなる。 クロード・シャノンは、事象 :math:`j` を観測したときの *驚き* を定量化するために、 :math:`\log \frac{1}{P(j)} = -\log P(j)` を採用した。 ここで、事象 :math:`j` に(主観的に)確率 :math:`P(j)` を割り当てていたとする。 :eq:`eq_softmax_reg_entropy` で定義したエントロピーは、 データ生成過程に本当に一致する正しい確率を割り当てたときの *期待驚き* である。 交差エントロピーの再考 ~~~~~~~~~~~~~~~~~~~~~~ では、エントロピーが真の確率を知っている人が経験する驚きの度合いだとすると、 交差エントロピーとは何だろうか? :math:`P` から :math:`Q` への交差エントロピーを :math:`H(P, Q)` と書くと、 これは、実際には確率 :math:`P` に従って生成されたデータを見たときに、 主観的確率 :math:`Q` を持つ観測者が感じる期待驚きである。 これは :math:`H(P, Q) \stackrel{\textrm{def}}{=} \sum_j - P(j) \log Q(j)` で与えられる。 最小の交差エントロピーは :math:`P=Q` のときに達成される。 この場合、\ :math:`P` から :math:`Q` への交差エントロピーは :math:`H(P, P)= H(P)` である。 要するに、交差エントロピーによる分類目的関数は2通りに考えられる。 (i) 観測データの尤度を最大化すること、 (ii) ラベルを伝えるのに必要な驚き(したがってビット数)を最小化することである。 要約と考察 ---------- この節では、離散的な出力空間上で最適化を可能にする、 最初の非自明な損失関数に出会った。 その設計の鍵は、離散カテゴリを確率分布からのサンプルとして扱うという 確率論的アプローチを取ったことでした。 その副作用として、ソフトマックスという便利な活性化関数にも出会った。 これは通常のニューラルネットワーク層の出力を、 有効な離散確率分布へ変換する。 ソフトマックスと組み合わせた交差エントロピー損失の微分は、 二乗誤差の微分と非常によく似ていることも見た。 すなわち、期待される振る舞いとその予測との差を取るという形である。 そして、その表面をかすめただけではあったが、 統計物理学や情報理論との刺激的なつながりにも触れた。 これで先へ進むには十分であり、できれば興味をそそるには十分であるが、 ここではまだ深く掘り下げたとは言えない。 とりわけ、計算上の考慮事項を飛ばした。 具体的には、\ :math:`d` 個の入力と :math:`q` 個の出力を持つ全結合層では、 パラメータ化と計算コストは :math:`\mathcal{O}(dq)` であり、 実用上は非常に高くつくことがある。 幸いなことに、\ :math:`d` 個の入力を :math:`q` 個の出力に変換するこのコストは、 近似と圧縮によって削減できる。 たとえば Deep Fried Convnets :cite:`Yang.Moczulski.Denil.ea.2015` は、 置換、フーリエ変換、スケーリングを組み合わせて、 コストを二次から対数線形へ削減する。 同様の技法は、より高度な構造化行列近似にも有効です :cite:`sindhwani2015structured`\ 。 最後に、圧縮係数 :math:`n` に基づいて、 少しの精度と引き換えに計算コストと保存コストを削減することを受け入れるなら、 四元数風の分解を用いてコストを :math:`\mathcal{O}(\frac{dq}{n})` にまで下げることもできる :cite:`Zhang.Tay.Zhang.ea.2021`\ 。 これは活発な研究分野である。 難しいのは、必ずしも最もコンパクトな表現や最小の浮動小数点演算数を目指すのではなく、 現代のGPU上で最も効率よく実行できる解を目指すからである。 演習 ---- 1. 指数型分布族とソフトマックスの関係をさらに深く調べることができる。 1. ソフトマックスに対する交差エントロピー損失 :math:`l(\mathbf{y},\hat{\mathbf{y}})` の2階微分を計算せよ。 2. :math:`\mathrm{softmax}(\mathbf{o})` によって与えられる分布の分散を計算し、それが上で計算した2階微分と一致することを示せ。 2. 3つのクラスがあり、それらが等確率で現れる、すなわち確率ベクトルが :math:`(\frac{1}{3}, \frac{1}{3}, \frac{1}{3})` であると仮定する。 1. これに対して2進コードを設計しようとすると何が問題か。 2. より良いコードを設計できるか? ヒント:2つの独立な観測を符号化しようとすると何が起こるか? :math:`n` 個の観測をまとめて符号化するとどうか? 3. 物理的なワイヤを通じて送られる信号を符号化するとき、エンジニアは必ずしも2進コードを使うわけではない。たとえば、\ `PAM-3 `__ は、2つの信号レベル :math:`\{0, 1\}` の代わりに3つの信号レベル :math:`\{-1, 0, 1\}` を使う。整数の範囲 :math:`\{0, \ldots, 7\}` を送るには、何個の3進単位が必要であるか? 電子工学の観点から、なぜこれがより良い考えなのか? 4. `Bradley–Terry モデル `__ は、 選好を表すためにロジスティックモデルを使う。ユーザがリンゴとオレンジのどちらかを選ぶとき、 スコア :math:`o_{\textrm{apple}}` と :math:`o_{\textrm{orange}}` を仮定する。要件は、スコアが大きいほど対応する項目が選ばれる確率が高くなり、 最大スコアの項目が最も選ばれやすいことです :cite:`Bradley.Terry.1952`\ 。 1. ソフトマックスがこの要件を満たすことを証明せよ。 2. リンゴでもオレンジでもないものを選ぶというデフォルトの選択肢を許したい場合はどうなるか? ヒント:今やユーザには3つの選択肢がある。 5. ソフトマックスは次の写像に由来してその名を得ている:\ :math:`\textrm{RealSoftMax}(a, b) = \log (\exp(a) + \exp(b))`\ 。 1. :math:`\textrm{RealSoftMax}(a, b) > \mathrm{max}(a, b)` を証明せよ。 2. 両者の差をどこまで小さくできるか? ヒント:一般性を失わずに :math:`b = 0` かつ :math:`a \geq b` としてよい。 3. :math:`\lambda > 0` のとき、\ :math:`\lambda^{-1} \textrm{RealSoftMax}(\lambda a, \lambda b)` に対してもこれが成り立つことを証明せよ。 4. :math:`\lambda \to \infty` で :math:`\lambda^{-1} \textrm{RealSoftMax}(\lambda a, \lambda b) \to \mathrm{max}(a, b)` となることを示せ。 5. 対応する softmin 関数を構成せよ。 6. これを2つより多い数に拡張せよ。 6. 関数 :math:`g(\mathbf{x}) \stackrel{\textrm{def}}{=} \log \sum_i \exp x_i` は、\ `対数分配関数 `__ とも呼ばれる。 1. この関数が凸であることを証明せよ。ヒント:そのために、1階微分がソフトマックス関数の確率に等しいことを使い、2階微分が分散であることを示せ。 2. :math:`g` が平行移動不変、すなわち :math:`g(\mathbf{x} + b) = g(\mathbf{x})` であることを示せ。 3. いくつかの座標 :math:`x_i` が非常に大きい場合はどうなるか? すべてが非常に小さい場合はどうか? 4. :math:`b = \mathrm{max}_i x_i` を選ぶと、数値的に安定な実装になることを示せ。 7. ある確率分布 :math:`P` があると仮定する。\ :math:`\alpha > 0` に対して :math:`Q(i) \propto P(i)^\alpha` となる別の分布 :math:`Q` を選ぶとする。 1. どの :math:`\alpha` が温度を2倍にすることに対応するか? どの選択が温度を半分にすることに対応するか? 2. 温度を0に近づけると何が起こるか? 3. 温度を\ :math:`\infty`\ に近づけると何が起こるか?