オムライスの備忘録

数学・統計学・機械学習・プログラミングに関することを記す

【深層学習】MobileNet V1

この記事の読者

深層学習・ディープラーニングの手法の1つである「MobileNet V1」について知りたい.


キーワード・知ってると理解がしやすい

  • CNN

yhayato1320.hatenablog.com


Index

MobileNet V1 とは

2017 に Google から提案された手法です. 深層学習・DeepLearning で使用されるネットワークアーキテクチャの一つです. ネットワークを複雑化・多層化することをせず、「精度」と「速度」の2つを最大化するために 単純なネットワークアーキテクチャになっております.

ネットワークアーキテクチャ

下図の左は通常のCNNのレイヤです. (Convolution + BatchNorm + ReLU)
下図の右がMobileNetのレイヤで、2 つの CNN で本来の CNN の役割をしてます. この 2つの CNN を合わせて Depthwise Separable Convolution と呼びます.

Depthwise Separable Convolution

この 2 つの CNN をそれぞれ Depthwise ConvolutionPointwise Convolution と呼びます.

通常の畳み込みが空間方向とチャネル方向の畳み込みを同時に行うのに対して、Depthwise Separable Convolution は Depthwise (空間方向)の畳み込みを行った後に、 Pointwise (チャネル方向)の畳み込みを行います

通常の Convolution

比較のために通常のConvolution をここに置いておきます.



パラメータ数

 M \times K \times K \times N

Depthwise Convolution

チャネル方向のカーネルフィルターをなくし、空間方向のフィルターのみで畳み込みを行います.


パラメータ数

 K \times K \times N

Pointwise Convolution

空間方向のカーネルフィルターをなくし、チャネル方向のフィルターのみで畳み込みを行います.


パラメータ数

 M \times N

Depthwise Separable Convolution 全体

2 つの畳み込みを連結して、Depthwise Separable Convolution 全体になります.


パラメータ数

 K \times K \times N + M \times N

パラメータ数

通常のConvolution では、 M \times K \times K \times N だが、 MobileNet V1 の場合では、 K \times K \times N + M \times N まで下がります.

 \dfrac{(M+K^2 )N}{MK^2 N} = \dfrac{1}{K^2} + \dfrac{1}{M}

だけ減っていることがわかります.

まとめ

  • 通常の畳み込みを 2 つの方向(空間方向とチャネル方向)に分割したことでパラメータ数が減り、精度を低下させずに計算を高速化させることが可能.

参考

  • MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications

  • MobileNet(v1,v2,v3)を簡単に解説してみた

【線形代数学】行列式

この記事の読者


線形代数の基礎となる「行列式」について知りたい



キーワード・知ってると理解がしやすい

yhayato1320.hatenablog.com

yhayato1320.hatenablog.com

Index

行列式 とは

線形変換後の空間が、線形変換前の空間に比べてどれだけ変化しているかを表す数値です.

表記

正方行列 A に対して、行列式  |A| または det(A) と表現します.

計算方法


\begin{vmatrix}
a_{11} & a_{12} \\
a_{21} & a_{22} \\
\end{vmatrix}
= a_{11}a_{22} - a_{12} a_{21}

性質

2 x 2 の行列の行式の性質を考えます.


 a_i, a'_j, a''_k を長さ2の横ベクトルとする.


(1) 
\begin{vmatrix}
a_1 \\
a'_2 + a''_2 \\
\end{vmatrix}
=
\begin{vmatrix}
a_1 \\
a'_2 \\
\end{vmatrix}
+
\begin{vmatrix}
a_1 \\
a''_2 \\
\end{vmatrix}

(2) 
\begin{vmatrix}
c a_1 \\
a_2 \\
\end{vmatrix}
=
c
\begin{vmatrix}
a_1 \\
a_2 \\
\end{vmatrix}

(3) 
\begin{vmatrix}
a_2 \\
a_1 \\
\end{vmatrix}
=
-
\begin{vmatrix}
a_1 \\
a_2 \\
\end{vmatrix}


n 次正方行列 A に対して

「Aが正則行列である」  \Longleftrightarrow det(A)  \neq 0
「rank(A) = n」  \Longleftrightarrow det(A)  \neq 0

まとめ

  • 行列式とは、ある行列に対する数、量、スカラーのこと
  • 幾何学的な意味としては「線形変換後の空間が、線形変換前の空間に比べてどれだけ変化しているかを表す数値」

参考

書籍

Webサイト

【線形代数学】行列の階数 / rank

この記事の読者


線形代数の基礎となる「行列の階数」について知りたい



キーワード・知ってると理解がしやすい

Index

階数 とは

列ベクトル(もしくは行ベクトル)の一次独立な最大個数

性質

n 次正方行列 A に対して
「Aが正則行列である」  \Longleftrightarrow 「rank(A) = n」

3 x 3 の行列を考えます.


A = 
\begin{pmatrix}
a_{11} & a_{12} & a_{13} \\
a_{21} & a_{22} & a_{23} \\
a_{31} & a_{32} & a_{33} \\
\end{pmatrix}


これをベクトルの結合と考えます.


A = 
\begin{pmatrix}
\overrightarrow{a_1} & \overrightarrow{a_2} & \overrightarrow{a_3} \\
\end{pmatrix}

それぞれの ベクトルは以下

\overrightarrow{a_1} =
\begin{pmatrix}
a_{11} \\
a_{21} \\
a_{31} \\
\end{pmatrix},
\overrightarrow{a_2} =
\begin{pmatrix}
a_{12} \\
a_{22} \\
a_{32} \\
\end{pmatrix},
\overrightarrow{a_3} =
\begin{pmatrix}
a_{13} \\
a_{23} \\
a_{33} \\
\end{pmatrix}


そして、各ベクトルが一次独立であるならば、rank(A) は 3 ということになります.

まとめ

  • 階数(rank) とは行列内のベクトルにおける、一次独立の最大個数のこと

参考

【線形代数学】逆行列と正則行列

この記事の読者


線形代数の基礎となる「逆行列」について知りたい



キーワード・知ってると理解がしやすい

Index

逆行列 とは

かけると 1 になる行列です.  2 \times \frac{1}{2} = 1 となるように、2 に対する  \frac{1}{2} のような存在になります. (逆もまた然り) スカラーでいう逆数のようなものです.

定義

B を  n \times n の正方行列とする. 正方行列 X が以下の条件を満たすとき、 B の逆行列であるといい、 B^{-1} と表現する. (ビーのインバースとか読む)
 XB = BX = I_{n}
( I_{n} は単位行列) また、このような X が存在するとき「B は 正則 である」 または「B は正則行列である」という.

性質


1.\ \ (A^{-1})^{-1} = A \\
2.\ \ (AB)^{-1} = B^{-1} A^{-1} \\
3.\ \ (A^{T})^{-1} = (A^{-1})^{T}

3 x 3 の行列を想定する.


A =
\begin{pmatrix}
2 & -1 & 6 \\
1 & 2 & 1 \\
3 & 5 & 4 \\
\end{pmatrix}


この行列 A の逆行列を F とすれば、以下のようになる


F =
\begin{pmatrix}
3 & 34 & -13 \\
-1 & -10 & 4 \\
-1 & -13 & 5 \\
\end{pmatrix}


実際に計算してみると


AF =
\begin{pmatrix}
6 + 1 - 6 & 68 + 10 -78 & -26 - 4 + 30 \\
3 - 2 - 1 & 34 - 20 - 13 & -13 + 8 + 5 \\
9 - 5 - 4 & 102 -50 - 52 & -39 + 20 + 20 \\
\end{pmatrix}
=
\begin{pmatrix}
1 & 0 & 0 \\
0 & 1 & 0 \\
0 & 0 & 1 \\
\end{pmatrix}
= I


単位行列になっていることがわかる.

まとめ

参考

【統計学】最小二乗法 #アルゴリズム編 #02

この記事の読者

統計学の基礎となる「最小二乗法」について知りたい.

Index

線形重回帰における最小二乗法

#01 では、線形単回帰での最小二乗法を考えた.

その場合は、説明変数が 1 つだけだったので、回帰係数は 2 つのみだった.

しかし、説明変数が複数だった場合はどのような計算を行うのか考える.

 Y_i = \beta_0 + \beta_1 X_{1,i} + \cdots + \beta_K X_{K,i} + \epsilon_i ,\ \ \ (i = 1, 2, \cdots, n) \tag{1}



K 個の説明変数を重回帰方程式 は以上のようになる.

(  \beta の係数は調整して 0 始まりにした.)

データ  X_{k, i} は k番目の説明変数で、i 番目のデータという意味になる.

誤差項は、#01 同様に考えると以下のようになり、 その二乗和が最小化するための目的の関数になる.

誤差項 :  \epsilon_i = Y_i - (\beta_0 + \beta_1 X_{1,i} + \cdots + \beta_K X_{K,i})

最小化する関数 :  S = \displaystyle \sum \epsilon_i^2



(目的の関数である二乗和は S (Sum) で表現しているが、 機械学習だと目的の関数はコスト関数 (Loss Function) のように呼称され、L (Loss) で表現することもある.)



#01 同様この関数を最小化するため、 \beta で編微分し、それを 0 として k+1 個の連立方程式を解く.

 \displaystyle \frac{\partial \beta_0}{\partial S} = 0
 \vdots
 \displaystyle \frac{\partial \beta_K}{\partial S} = 0



解いた結果求められる  \hat{\beta_k} は、単回帰同様 標本回帰係数 となる.

また、それらを用いた重回帰方程式を 標本重回帰方程式 と呼ぶ.

 Y = \hat{\beta_0} + \hat{\beta_1}X_{1} + \cdots + \hat{\beta_K}X_{K}



ここまでは、#01 の単回帰の推定の手順と同様.

行列の適用

#01 では、2つのパラメータ係数を 連立方程式を解くだけだったが、 説明変数が k 個ある場合は k + 1 個のパラメータを推定してする必要がある.

そこで、連立方程式を解くために行列を使用して表現することで、いくつかのメリットを享受できる.

(1) の式をデータ番号 i を使わずに書くと以下のようになる.

 Y_1 = \beta_0 + \beta_1 X_{1, 1} + \cdots + \beta_K X_{K, 1} + \epsilon_1
 \vdots
 Y_n = \beta_0 + \beta_1 X_{1, n} + \cdots + \beta_K X_{K, n} + \epsilon_n



細かいところだが、 \beta_0 = \beta_0 \times 1 のように変更する.

 Y_1 = \beta_0 \times 1 + \beta_1 X_{1, 1} + \cdots + \beta_K X_{K, 1} + \epsilon_1
 \vdots
 Y_n = \beta_0 \times 1 + \beta_1 X_{1, n} + \cdots + \beta_K X_{K, n} + \epsilon_n



この連立方程式を行列の形式で表現する.


\begin{pmatrix}
y_1 \\
\vdots \\
y_n \\
\end{pmatrix}
 = 
\begin{pmatrix}
1, & X_{1, 1}, & \cdots, & X_{K, 1} \\
\vdots & \vdots & \ddots & \vdots \\
1, & X_{1, n}, & \cdots, & X_{K, n} \\
\end{pmatrix}

\begin{pmatrix}
\beta_0 \\
\vdots \\
\beta_K \\
\end{pmatrix}
 + 
\begin{pmatrix}
\epsilon_0 \\
\vdots \\
\epsilon_n \\
\end{pmatrix}


[n \times 1] = [n \times (K+1) ] \times [ (K+1) \times 1] + [n \times 1]



下には、行列のサイズを示している.



各行列を以下のようにして、

 
\boldsymbol{Y} = 
\begin{pmatrix}
y_1 \\
\vdots \\
y_n \\
\end{pmatrix}
, \ \ \ 
\boldsymbol{X} = 
\begin{pmatrix}
1, & X_{1, 1}, & \cdots, & X_{K, 1} \\
\vdots & \vdots & \ddots & \vdots \\
1, & X_{1, n}, & \cdots, & X_{K, n} \\
\end{pmatrix}
, \ \ \ 
\boldsymbol{\beta} =
\begin{pmatrix}
\beta_0 \\
\vdots \\
\beta_K \\
\end{pmatrix}
, \ \ \ 
\boldsymbol{\epsilon} =
\begin{pmatrix}
\epsilon_0 \\
\vdots \\
\epsilon_n \\
\end{pmatrix}



以下のように、行列の形式に書き直す.


\boldsymbol{Y} = \boldsymbol{X} \boldsymbol{\beta} + \boldsymbol{\epsilon}



  •  \boldsymbol{Y} : n次元観測値ベクトル (目的変数ベクトル)
  •  \boldsymbol{X} : 計画行列
  •  \boldsymbol{\beta} : 回帰係数ベクトル
  •  \boldsymbol{\epsilon} : 誤差ベクトル

このようにして、行列で表現することができる.

計算方法

まず、行列形式で最小化する目的の関数 S を表現する.

目的の関数は  \boldsymbol{\beta} に対する関数とも解釈できますので、  S(\boldsymbol{\beta}) と書いてみることにする.




\begin{eqnarray}
S(\boldsymbol{\beta}) &=& \displaystyle \sum_{i=1}^{n} \epsilon_i^{2} \\
  &=& \boldsymbol{\epsilon}^{T} \boldsymbol{\epsilon} \\
  &=& ( \boldsymbol{Y} - \boldsymbol{X} \boldsymbol{\beta} )^{T} ( \boldsymbol{Y} - \boldsymbol{X} \boldsymbol{\beta} )
  &=& \boldsymbol{Y}^{T} \boldsymbol{Y} -2 \boldsymbol{Y}^{T} \boldsymbol{X} \boldsymbol{\beta} + 
\boldsymbol{\beta}^{T} \boldsymbol{X}^{T} \boldsymbol{X} \boldsymbol{\beta}
\end{eqnarray}



これを最小とする  \hat{\boldsymbol{\beta}} = (\hat{\beta_1}, \cdots, \hat{\beta_K})^{T} が推定値となる.

では、ベクトル変数  \boldsymbol{\beta} S(\boldsymbol{\beta}) をベクトル微分する.

以下ベクトル微分のルール.

 
1. \displaystyle \frac{ \partial (\boldsymbol{c}^{T}) \boldsymbol{\beta} }{\partial \boldsymbol{\beta}} = \boldsymbol{c} \\
2. \displaystyle \frac{ \partial ( \boldsymbol{\beta}^{T} \boldsymbol{A} \boldsymbol{\beta} ) }{\partial \boldsymbol{\beta}} = (A + A^{T}) \boldsymbol{\beta}



以下、微分結果


\begin{eqnarray}
\displaystyle \frac{ \partial S( \boldsymbol{\beta} ) }{\partial \boldsymbol{\beta} } 
&=& 
\frac{ \partial }{\partial \boldsymbol{\beta}} 
( \boldsymbol{Y}^{T} \boldsymbol{Y} -2 \boldsymbol{Y}^{T} \boldsymbol{X} \boldsymbol{\beta} + 
\boldsymbol{\beta}^{T} \boldsymbol{X}^{T} \boldsymbol{X} \boldsymbol{\beta} ) \\
&=& -2 \boldsymbol{X}^{T} \boldsymbol{Y} + 2 \boldsymbol{X}^{T} \boldsymbol{X} \boldsymbol{\beta}
\end{eqnarray} \tag{2}



(2) の最後の式を 正規方程式と呼ぶ.

そして、(2) を 0 とおいて、解  \hat{\boldsymbol{\beta}} を求める.

 \hat{\boldsymbol{\beta}} = ( \boldsymbol{X}^{T} \boldsymbol{X} )^{-1} \boldsymbol{X}^{T} \boldsymbol{Y}



 \boldsymbol{X}^{T} \boldsymbol{X}逆行列を持つことを前提としている.



まとめ

  • 重回帰のような説明変数の線形和のような形式なら、行列形式を適用して最小二乗法を適用して係数パラメータを利用できる
  • 行列表記をすることで、表記や計算を簡略化できる

参考

関連動画

【統計学】回帰分析 #まとめ編

Index

回帰分析

2 変数  X, Y のデータがあるとき回帰方程式と呼ばれる「説明の関係を定量的に表す式」 を求めることを目的とする分析手法.





線形基底関数モデル

ロジスティック回帰

リッジ回帰

  • リッジ回帰

ガウス過程回帰 / ベイズ回帰

スパース回帰

Multi Output Regression

推定法

回帰係数 (パラメータ) を推定する方法.

最小二乗法

回帰直線と観測データの距離を誤差とする.

最尤法 / 最尤推定 / Maximum Likelihood Method

回帰分析を確率モデルとして考える.

尤度を誤差とする.

参考

書籍

Web サイト

  • 「回帰分析から分かること」と「変数選択」

関連動画

【統計学】最小二乗法 #アルゴリズム編 #01

この記事の読者

回帰分析で利用される「最小二乗法」について知りたい.

Index

最小二乗法とは

ある目的の関数を最小にする係数・パラメータを推定する方法の一つ.

回帰分析などで使用されることが多い.

線形単回帰における最小二乗法

線形単回帰を例にして、どのように最小二乗法が適用されるのかを考える.

以下のような母回帰方程式を考える.

 Y_i\ =\ \beta_1\ +\ \beta_2 X_i\ +\ \epsilon_i



そこで、母回帰係数 \beta_1, \beta_2 を推定することを考える.

まず、誤差項  \epsilon_i は以下のように表せる.

 \epsilon_i\ =\ Y_i\ -\ (\beta_1\ +\ \beta_2X_i),\ \ \ i=1, 2, \cdots, n





 \epsilon_i の符号の影響を取り除くために二乗し、
それを総和する関数を最小化する目的の関数として、 S とする.

 S = \displaystyle \sum_i \epsilon_i^{2} \\
\ \ = \displaystyle \sum_i \left \{ Y_i\ -\ (\beta_1\ +\ \beta_2X_i) \right \}^{2}



 S Y_i X_i で説明できない部分の総和を表しているから、
できるだけ小さい方が望ましいと考えられる.



 S を最小にする  \hat{\beta_1}, \hat{\beta_2} \beta_1, \beta_2 の推定量としたとき、
これらを推定することが、最小二乗法 (Method of Least Squares) の考え.

また、 \hat{\beta_1}, \hat{\beta_2}最小二乗推定量 という.

計算方法

では、具体的にどのように計算を行うのかを考える.

 S を最小にする  \hat{\beta_1}, \hat{\beta_2} は、
偏微分した式を 0 とおいた以下の方程式を解くことで求めることができる.

 
\begin{align}
\displaystyle \frac{\partial \beta_1}{\partial S}&\ =\ -2 \displaystyle \sum (Y_i - \beta_1 - \beta_2 X_i) = 0  \\
\\
\displaystyle \frac{\partial \beta_2}{\partial S}&\ =\ -2 \displaystyle \sum (Y_i - \beta_1 - \beta_2 X_i)X_i = 0
\end{align}



これらを整理すると、以下の式になり、これを正規方程式 と呼ぶ.


\begin{array}{ccccccc}
n\ & \beta_1 & + & \left( \displaystyle \sum X_i \right) & \beta_2 & = & \displaystyle \sum Y_i \\
\left( \displaystyle \sum X_i \right)\ & \beta_1 & + & \left( \displaystyle \sum X_i^{2} \right) & \beta_2 & = & \displaystyle \sum X_i Y_i
\end{array}



これを解くと、 \hat{\beta_1}, \hat{\beta_2} は以下のようになる.


\begin{cases}
\hat{\beta_2} = \displaystyle \frac{\displaystyle \sum (X_i - \bar{X}) (Y_i - \bar{Y})}{\displaystyle \sum (X_{i}\ -\ \bar{X})^{2}} \\
\\
\hat{\beta_1} = \bar{Y} - \hat{\beta_2} \bar{X}
\end{cases}


ここで、 \bar{X}, \bar{Y} X_i, Y_i の標本平均としている.



 \hat{\beta_1}, \hat{\beta_2}標本回帰係数 と呼ばれる.

また、それらを使った以下のような回帰方程式を 標本回帰方程式 という.


Y = \hat{\beta_1} + \hat{\beta_2}X





 \hat{\beta_1},\ \hat{\beta_2} は、それぞれ、傾き、 y 切片という意味を持っている.



また、 \hat{Y_i} = \hat{\beta_1} + \hat{\beta_2} X_i E[ Y_i ] の推定値となり、これを回帰値と呼ぶ.

回帰残差

実測値  Y_i と、標本回帰方程式から得られた回帰値  \hat{Y_{i}} とのずれは以下のように表され、

 
\begin{align}
\hat{e_i}&\ =\ Y_{i}\ -\ \hat{Y_{i}}\\
&\ =\ Y_{i}\ -\ (\hat{\beta_{1} }\ +\ \hat{\beta_{2}} X_{i})
\end{align}



これを回帰残差 (Residual) と呼ぶ.

 \hat{e_i} は、誤差項  \epsilon_{i} の推定量であることに注意.

まとめ

  • 目的の関数を最小化するためのパラメータを推定するための手法
  • 回帰分析では、誤差項 を目的の関数として最小化するように回帰係数を求める

  • 線形重回帰の係数パラメータ推定

参考

関連動画