<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Linear-Algebra on M1KE BL0G</title><link>https://www.m1ke.org/tags/linear-algebra/</link><description>Recent content in Linear-Algebra on M1KE BL0G</description><generator>Hugo -- gohugo.io</generator><language>ja-jp</language><copyright>mike</copyright><lastBuildDate>Fri, 20 Oct 2023 21:32:47 +0900</lastBuildDate><atom:link href="https://www.m1ke.org/tags/linear-algebra/index.xml" rel="self" type="application/rss+xml"/><item><title>関数の線型性</title><link>https://www.m1ke.org/p/%E9%96%A2%E6%95%B0%E3%81%AE%E7%B7%9A%E5%9E%8B%E6%80%A7/</link><pubDate>Fri, 20 Oct 2023 21:32:47 +0900</pubDate><guid>https://www.m1ke.org/p/%E9%96%A2%E6%95%B0%E3%81%AE%E7%B7%9A%E5%9E%8B%E6%80%A7/</guid><description>&lt;img src="https://www.m1ke.org/p/%E9%96%A2%E6%95%B0%E3%81%AE%E7%B7%9A%E5%9E%8B%E6%80%A7/func.png" alt="Featured image of post 関数の線型性" /&gt;&lt;h2 id="背景"&gt;背景&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;関数の線型性について理解していなかったので記事を作った&lt;/li&gt;
&lt;li&gt;特に統計の展開などによく出るため改めてAIでまとめた&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="線形性線型性とは"&gt;線形性（線型性）とは&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;ある操作（関数・演算）$f$が、以下の2つの条件を満たすとき、$f$は線形（線型）であるという&lt;/li&gt;
&lt;/ul&gt;
$$
f(x+y) = f(x) + f(y) \quad (\text{加法性})
$$$$
f(ax) = a f(x) \quad (\text{斉次性})
$$&lt;ul&gt;
&lt;li&gt;この2つはまとめて、以下の1つの式で表されることが多い&lt;/li&gt;
&lt;/ul&gt;
$$
f(ax + by) = a f(x) + b f(y)
$$&lt;ul&gt;
&lt;li&gt;直感的には、「入力を分解して個別に処理し、後で足し合わせても、まとめて処理したのと同じ結果になる」という性質&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="アフィン変換との違い"&gt;アフィン変換との違い&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;$f(x) = ax$は線形だが、$f(x) = ax + b$（$b \neq 0$）は線形ではない&lt;/li&gt;
&lt;li&gt;見た目が似ているため混同しやすいが、後者はアフィン変換（affine transformation）と呼ばれる、別のカテゴリの変換&lt;/li&gt;
&lt;li&gt;線形かどうかを見分ける必要条件は、以下の通り&lt;/li&gt;
&lt;/ul&gt;
$$
f(0) = 0
$$&lt;ul&gt;
&lt;li&gt;$f(x)=ax+b$は$f(0)=b \neq 0$となるため、この時点で線形ではないと分かる&lt;/li&gt;
&lt;li&gt;逆に、$f(0)=0$を満たしても、加法性・斉次性の両方を満たすとは限らないので、あくまで必要条件（線形であるための最低条件）である点に注意&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="線形な演算のカタログ"&gt;線形な演算のカタログ&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;線形性は統計に限った話ではなく、数学の色々な演算がこの性質を持っている
&lt;ul&gt;
&lt;li&gt;微分: $\frac{d}{dx}(af(x)+bg(x)) = a f'(x) + b g'(x)$&lt;/li&gt;
&lt;li&gt;積分: $\int (af(x)+bg(x))\, dx = a\int f(x)\,dx + b\int g(x)\,dx$&lt;/li&gt;
&lt;li&gt;総和（シグマ）: $\sum_i (a x_i + b y_i) = a\sum_i x_i + b\sum_i y_i$&lt;/li&gt;
&lt;li&gt;極限: $\lim (a x_n + b y_n) = a\lim x_n + b \lim y_n$&lt;/li&gt;
&lt;li&gt;フーリエ変換・ラプラス変換&lt;/li&gt;
&lt;li&gt;畳み込み（Convolution）&lt;/li&gt;
&lt;li&gt;行列による変換: $A(a\mathbf{x}+b\mathbf{y}) = aA\mathbf{x}+bA\mathbf{y}$&lt;/li&gt;
&lt;li&gt;期待値（後述）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;「足してから処理する」のと「処理してから足す」のが常に一致する、という共通点がある&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="非線形な演算の例"&gt;非線形な演算の例&lt;/h2&gt;
&lt;p&gt;以下のような演算は、線形ではない。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;2乗: $(x+y)^2 \neq x^2+y^2$（展開すると$2xy$の項が余分に出てくる）&lt;/li&gt;
&lt;li&gt;絶対値: $|x+y| \neq |x|+|y|$とは限らない（$x$と$y$が異符号のとき、特にズレる）&lt;/li&gt;
&lt;li&gt;対数: $\log(x+y) \neq \log x + \log y$
&lt;ul&gt;
&lt;li&gt;ただし$\log(xy) = \log x + \log y$という別の性質は成り立つ。これは「和」ではなく「積」に対する加法性であり、線形性とは別物&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;指数関数、分散（後述）なども同様に線形ではない&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="線形性の確認方法"&gt;線形性の確認方法&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;加法性・斉次性の両方が常に成り立つことを証明できれば線形&lt;/li&gt;
&lt;li&gt;逆に、線形でないことを示すのは簡単で、反例を1つ見つければよい&lt;/li&gt;
&lt;li&gt;例えば$f(x)=x^2$の場合、$f(1+1)=4$だが$f(1)+f(1)=1+1=2$なので、$f(1+1)\neq f(1)+f(1)$となり、非線形だと分かる&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="なぜ線形性が重要か"&gt;なぜ線形性が重要か&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;線形な操作は、「全体をまとめて計算する」のと「部分ごとに計算してから足し合わせる」のが常に一致する&lt;/li&gt;
&lt;li&gt;この性質のおかげで、複雑な問題を小さく分解して個別に計算し、後で組み合わせるというアプローチが正当化される&lt;/li&gt;
&lt;li&gt;逆に非線形な操作では、この分解が使えないため、扱いが格段に難しくなることが多い&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="統計における線形性"&gt;統計における線形性&lt;/h2&gt;
&lt;h3 id="期待値の線形性"&gt;期待値の線形性&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;期待値（Expectation）$E[\cdot]$は線形な操作の代表例&lt;/li&gt;
&lt;/ul&gt;
$$
E[aX + bY] = a E[X] + b E[Y]
$$&lt;ul&gt;
&lt;li&gt;あわせて、定数$c$の期待値は、その定数自身になるという性質もある&lt;/li&gt;
&lt;/ul&gt;
$$
E[c] = c
$$&lt;ul&gt;
&lt;li&gt;直感的には、確率変動しない値（常に$c$）を何回観測しても、平均は$c$のまま変わらないということ&lt;/li&gt;
&lt;li&gt;前述のVar(X)の導出で、$E[\mu^2]=\mu^2$（$\mu$は定数）としていたのも、この性質を使っている&lt;/li&gt;
&lt;li&gt;ここで重要なのは、$E[aX + bY] = a E[X] + b E[Y]$の式は$X$と$Y$が独立かどうかに関係なく、常に成り立つという点&lt;/li&gt;
&lt;li&gt;相関があろうがなかろうが、期待値は分解して個別に計算し、後で足し合わせてよい&lt;/li&gt;
&lt;li&gt;注意点として、この式の$a,b$は定数であることが前提。$Y$が確率変数の場合、$E[XY]$を$Y\,E[X]$のように分解することはできない
&lt;ul&gt;
&lt;li&gt;$E[XY]$（確率変数同士の積の期待値）は、線形性の対象外&lt;/li&gt;
&lt;li&gt;一般には以下の関係が成り立ち、$E[XY]=E[X]E[Y]$となるのは、$X,Y$が独立（正確には$\text{Cov}(X,Y)=0$）のときだけ&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
$$
E[XY] = E[X]E[Y] + \text{Cov}(X,Y)
$$&lt;h3 id="分散の計算公式を期待値の線形性から導く"&gt;分散の計算公式を期待値の線形性から導く&lt;/h3&gt;
&lt;p&gt;分散の定義は以下の通り。&lt;/p&gt;
$$
\text{Var}(X) = E\left[(X-E[X])^2\right]
$$&lt;p&gt;これを展開し、期待値の線形性を使って整理すると、実務でもよく使われる別の形が得られる。$\mu = E[X]$とすると、以下のようになる。&lt;/p&gt;
$$
\text{Var}(X) = E[(X-\mu)^2] = E[X^2 - 2\mu X + \mu^2]
$$&lt;p&gt;期待値の線形性（$\mu$は定数）を使うと、以下のように展開できる。&lt;/p&gt;
$$
E[X^2 - 2\mu X + \mu^2] = E[X^2] - 2\mu E[X] + \mu^2 = E[X^2] - 2\mu^2 + \mu^2 = E[X^2] - \mu^2
$$&lt;p&gt;したがって、以下の式が成り立つ。&lt;/p&gt;
$$
\text{Var}(X) = E[X^2] - (E[X])^2
$$&lt;ul&gt;
&lt;li&gt;この変形が使えるのは、途中の$E[X^2 - 2\mu X + \mu^2]$を$E[X^2] - 2\mu E[X] + \mu^2$へ展開する部分で、期待値の線形性を使っているため&lt;/li&gt;
&lt;li&gt;この形は、生のデータから分散を計算する際に実務でもよく使われる（2乗の期待値から、期待値の2乗を引くだけで求まる）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="分散自体は線形ではない"&gt;分散自体は線形ではない&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;期待値とは対照的に、分散は線形ではない&lt;/li&gt;
&lt;/ul&gt;
$$
\text{Var}(aX+b) = a^2 \text{Var}(X)
$$&lt;ul&gt;
&lt;li&gt;定数$b$を足しても分散は変わらず（平行移動はばらつきに影響しない）、係数$a$は2乗されて効いてくる。これは加法性・斉次性のどちらの形にもなっていない&lt;/li&gt;
&lt;li&gt;さらに、$X$と$Y$の和の分散は、以下のように単純な合計にはならない&lt;/li&gt;
&lt;/ul&gt;
$$
\text{Var}(X+Y) = \text{Var}(X) + \text{Var}(Y) + 2\text{Cov}(X,Y)
$$&lt;ul&gt;
&lt;li&gt;$X$と$Y$が独立（$\text{Cov}(X,Y)=0$）のときだけ、$\text{Var}(X+Y) = \text{Var}(X)+\text{Var}(Y)$という単純な形になる&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="共分散の双線形性"&gt;共分散の双線形性&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;共分散（Covariance）は、片方の変数を固定すれば、もう片方について線形になる。この性質を双線形性（Bilinearity）と呼ぶ&lt;/li&gt;
&lt;/ul&gt;
$$
\text{Cov}(aX+bY,\ Z) = a\,\text{Cov}(X,Z) + b\,\text{Cov}(Y,Z)
$$&lt;ul&gt;
&lt;li&gt;2つの引数それぞれについて線形なので、「双」線形と呼ばれる&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="証明相関係数基準化した変数同士の共分散"&gt;証明：相関係数＝基準化した変数同士の共分散&lt;/h3&gt;
&lt;p&gt;線形性・双線形性の応用例として、相関係数と共分散の関係を証明しておく。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;基準化（standardization）: 変数から平均を引いて標準偏差で割り、平均0・標準偏差1に揃える変換&lt;/li&gt;
&lt;/ul&gt;
$$
Z_X = \frac{X-\mu_X}{\sigma_X}, \quad Z_Y = \frac{Y-\mu_Y}{\sigma_Y}
$$&lt;p&gt;以下は、この$Z_X$・$Z_Y$同士の共分散が、もとの$X$・$Y$の相関係数$r$と一致することの証明である。&lt;/p&gt;
&lt;p&gt;まず、共分散が持つ以下の2つの性質を使う（$c,a,b$は定数）。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;定数倍でのスケーリング：$\text{Cov}(aX,\,bY)=ab\,\text{Cov}(X,Y)$
&lt;ul&gt;
&lt;li&gt;前述の双線形性の式で、2項目の係数を0とすれば得られる系（$\text{Cov}(aX+0\cdot W,\,Z)=a\,\text{Cov}(X,Z)$）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;平行移動不変性：$\text{Cov}(X+c,\,Y)=\text{Cov}(X,Y)$
&lt;ul&gt;
&lt;li&gt;定義$\text{Cov}(X,Y)=E[(X-\mu_X)(Y-\mu_Y)]$に戻ると、$X$に定数$c$を足すと平均も同じ$c$だけ増えるため、偏差$X-\mu_X$自体は変わらない&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;$Z_X$・$Z_Y$の共分散に、この2つの性質を順番に適用する。&lt;/p&gt;
$$
\text{Cov}(Z_X,Z_Y) = \text{Cov}\left(\frac{X-\mu_X}{\sigma_X},\ \frac{Y-\mu_Y}{\sigma_Y}\right) = \frac{1}{\sigma_X \sigma_Y}\,\text{Cov}(X-\mu_X,\ Y-\mu_Y) = \frac{\text{Cov}(X,Y)}{\sigma_X \sigma_Y} = r
$$&lt;ul&gt;
&lt;li&gt;1つ目の等号から2つ目は定数倍でのスケーリング、2つ目から3つ目は平行移動不変性を使っている&lt;/li&gt;
&lt;li&gt;最後の等号は、相関係数の定義$r=\frac{\text{Cov}(X,Y)}{\sigma_X\sigma_Y}$そのもの&lt;/li&gt;
&lt;li&gt;つまり、2つの変数の相関係数は、それぞれを基準化した変数同士の共分散に等しい。相関係数が「単位・スケールの影響を取り除いた共分散」であることの、線形性を使った裏付けになっている&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="線形写像と行列"&gt;線形写像と行列&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;有限次元のベクトル空間の間の線形な変換（線形写像）は、基底ベクトルの行き先さえ決めれば全体が決まる&lt;/li&gt;
&lt;li&gt;そのため、任意の線形写像は行列$A$を使って$f(\mathbf{x})=A\mathbf{x}$の形で表せる&lt;/li&gt;
&lt;li&gt;逆に言うと、行列による変換は必ず線形になる（原点は必ず原点に写る、$A\mathbf{0}=\mathbf{0}$）&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="機械学習への応用"&gt;機械学習への応用&lt;/h2&gt;
&lt;h3 id="線形回帰"&gt;線形回帰&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;単回帰分析$y=a+bx$は、係数$a,b$について線形なモデルという意味で「線形モデル」と呼ばれる&lt;/li&gt;
&lt;li&gt;最小二乗法による解は、行列演算だけで閉じた形（closed-form solution）で求まる。これは背景にある演算が線形であることの恩恵&lt;/li&gt;
&lt;li&gt;一方で、$y = a + bx$自体は（$x$についての関数として見ると）アフィン変換であり、前述の意味では厳密な線形ではない点に注意（統計・機械学習の文脈では、慣習的に「線形モデル」と呼ばれる）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="ニューラルネットの層が線形だけだと意味がない理由"&gt;ニューラルネットの層が線形だけだと意味がない理由&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;ニューラルネットの1層は、基本的に$f(\mathbf{x}) = A\mathbf{x}+\mathbf{b}$という、行列によるアフィン変換&lt;/li&gt;
&lt;li&gt;もし活性化関数を挟まずに、この層をいくつ重ねても、全体としては1つのアフィン変換に潰れてしまう&lt;/li&gt;
&lt;/ul&gt;
$$
A_2(A_1\mathbf{x}+\mathbf{b}_1)+\mathbf{b}_2 = (A_2A_1)\mathbf{x} + (A_2\mathbf{b}_1+\mathbf{b}_2)
$$&lt;ul&gt;
&lt;li&gt;右辺は、新しい行列$A_2A_1$と新しいバイアス$A_2\mathbf{b}_1+\mathbf{b}_2$を使った、1層のアフィン変換と同じ形になっている&lt;/li&gt;
&lt;li&gt;つまり、何層重ねても表現力は1層分のままで、複雑な非線形の関係を学習できない&lt;/li&gt;
&lt;li&gt;これを避けるため、各層の後にReLUやシグモイドのような非線形の活性化関数を挟み、意図的に線形性を崩すことで、層を重ねる意味（表現力の向上）を持たせている&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="万能近似定理universal-approximation-theorem"&gt;万能近似定理（Universal Approximation Theorem）&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;1989年にCybenkoらが示した定理で、非線形性がもたらす表現力の大きさを裏付けるもの&lt;/li&gt;
&lt;li&gt;大まかには、以下のような内容
&lt;ul&gt;
&lt;li&gt;隠れ層1層だけのニューラルネットワークでも、シグモイドのような非線形の活性化関数$\sigma$を使い、ユニット数（幅）を十分大きく取れば、ある種の連続関数を任意の精度で近似できる&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
$$
F(\mathbf{x}) = \sum_{i=1}^{N} c_i \, \sigma(\mathbf{w}_i^\top \mathbf{x} + b_i)
$$&lt;ul&gt;
&lt;li&gt;$N$（隠れユニット数）・$c_i$・$\mathbf{w}_i$・$b_i$を適切に選べば、任意の許容誤差$\varepsilon&gt;0$に対して、定義域全体で$|F(\mathbf{x})-f(\mathbf{x})|&lt;\varepsilon$を満たす近似$F$が作れる、という主張&lt;/li&gt;
&lt;li&gt;ポイントは、$\sigma$が非線形でなければこの定理は成り立たないこと
&lt;ul&gt;
&lt;li&gt;前述の通り、$\sigma$が線形（恒等関数など）だと、$F$は結局1つのアフィン変換に潰れてしまい、表現できる関数のクラスは「アフィン関数」だけに限定される&lt;/li&gt;
&lt;li&gt;非線形性があるからこそ、幅を広げるだけで任意の連続関数に近づけるという、桁違いの表現力が生まれる&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;この定理には、以下のような注意点もある。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;「表現できる」ことを保証するだけで、「学習（勾配降下法などで実際にその関数を見つけられる）」ことは保証しない&lt;/li&gt;
&lt;li&gt;必要な隠れユニット数$N$が、近似したい関数によっては非現実的に大きくなることがある&lt;/li&gt;
&lt;li&gt;実務では、幅を広げた浅い（1層の）ネットワークより、層を重ねた深いネットワークの方が、同程度の表現力をずっと少ないパラメータ数で達成できることが知られている（表現力と学習効率は別の話）&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="pythonでの線形性チェック"&gt;Pythonでの線形性チェック&lt;/h2&gt;
&lt;p&gt;以下のように、加法性・斉次性が成り立つかどうかを数値的に確認できる。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;numpy&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nn"&gt;np&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;is_linear&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tol&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;1e-8&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;lhs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;rhs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;allclose&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;lhs&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rhs&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;atol&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;tol&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;array&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;2.0&lt;/span&gt;&lt;span class="p"&gt;]),&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;array&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="mf"&gt;3.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;2.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;3.0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 線形な例: 行列による変換&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;A&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;array&lt;/span&gt;&lt;span class="p"&gt;([[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;]])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;is_linear&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;lambda&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;A&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="c1"&gt;# True&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 非線形な例: 2乗&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;is_linear&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;lambda&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="c1"&gt;# False&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;数値的に一致するかを確認しているだけなので、あくまで「反例を探す」ための簡易チェックであり、これで一致したからといって数学的に線形であることの証明にはならない点に注意&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="まとめ"&gt;まとめ&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;線形性は、加法性（$f(x+y)=f(x)+f(y)$）と斉次性（$f(ax)=af(x)$）の2条件で定義される&lt;/li&gt;
&lt;li&gt;$f(x)=ax+b$のようなアフィン変換は、$f(0)\neq0$となるため線形ではない&lt;/li&gt;
&lt;li&gt;微分・積分・総和・期待値など、多くの演算が線形性を持ち、「分解して個別に計算し、後で足し合わせてよい」という扱いやすさをもたらす&lt;/li&gt;
&lt;li&gt;期待値は独立性に関係なく常に線形だが、分散は線形ではなく、$\text{Var}(X+Y)$には共分散の項が加わる&lt;/li&gt;
&lt;li&gt;分散の計算公式$\text{Var}(X)=E[X^2]-(E[X])^2$も、期待値の線形性を使って導出できる&lt;/li&gt;
&lt;li&gt;共分散の双線形性（平行移動不変性・定数倍でのスケーリング）を使うと、相関係数が「基準化した変数同士の共分散」に一致することも証明できる&lt;/li&gt;
&lt;li&gt;ニューラルネットで非線形な活性化関数が必須なのも、線形な層をいくら重ねても1つのアフィン変換に潰れてしまい、表現力が増えないため&lt;/li&gt;
&lt;li&gt;万能近似定理は、非線形な活性化関数さえあれば、1層のネットワークでも任意の連続関数を近似できることを示す定理で、非線形性の重要さを裏付けている&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>