「ゼロから作るDeep Learning」自習メモ（読めない用語集）

「ゼロから作るDeep Learning」(斎藤 康毅　著　オライリー・ジャパン刊)を読んでいる時に、参照したサイト等をメモしていきます。

新しい分野で、新しい単語、用語が出てくるのは当然ですが、それがアルファベットの頭をとった略語だったりすると、非英語民族にはどう読めばいいのかわかりません。
その昔、専門学校でCOBOLを教えたとき、学生が最初につまづいたのが、COBOLで使われている命令の発音と意味でした。発音できないものは覚えられないし、使えない。

と言う事で、

この本の中に出てきた単語で、読み方とか語源とか、私が調べたものをまとめてみました。
読んでいる最中なので、本に出てきた順になっています。

# １巻目
## １章

#### Python  
パイソン　もともと「にしきへび」の意味の英単語なので、その発音で読みます。
なんで、蛇？　かというと、モンティ・パイソンというＴＶ番組があって・・・（有名な話なので省略）

#### NumPy　
ナンパイ これは、もとが数値演算（numerical operation）用のpythonライブラリーということだから、number（ナンバー） のナンとパイソンのパイで、ナンパイでいいかと。　

#### SciPy　
サイパイ　科学技術計算(science　サイエンス)用ということで、サイパイ。その昔、SF小説(science fiction)のことを、エスエフと呼ぶか、SciFi（サイファイ）と呼ぶかなんて話もありましたが、まったく別の話。

#### TensorFlow 
テンサーフロー 日本では「テンソルフロー」と読む人もいるらしいが、google　の人はテンサーフローと読んでいる。 tensor （多次元配列）という単語は、英語読みではテンサー、ドイツ語ではテンソル。日本の科学技術関連の文献では「テンソル」が主流。戦前に定着した語なのかもしれません。

#### Matplotlib　
マットプロットリブ　MATLABという数値解析ソフトと同様のことをpythonで使えるようにしたライブラリ。Mat は　Matrix(行列)がもともとの語のようです。plotは「グラフを描く」という英単語。行列（配列）をグラフにするライブラリ。 

#### Anaconda
アナコンダ　もとは南米のヘビの名前。pythonが蛇だから、ディストリビューションのほうも蛇の名前ということでしょう。

## ２章

#### AND 　NAND 　OR 　XOR
アンド　ナンド　オア　エクスオア　論理演算の基本です。

## ３章

#### activation function　
アクティベーション　活性化関数　
あとになって、アクティベーション（活性化関数の後の出力データ）　なんて語が出てきたりします。

#### sigmoid function 
シグモイド関数 
sigmoid　はS字形のこと

#### exp() 　exponential function 
e(ネピア数)を底とする指数関数。 
exp(x)は eのx乗。きちんとエクスポネンシャルエックスと読む人もいるようだが、イーのエックス乗で意味は通じる。

#### ReLU（Rectified Linear Unit）　
レル
　rectify(調整）された linear(線形関数)を使ったユニット。元の語の読み方をつなげば、　レルになる。ランプ関数という別名があるらしいが、わざわざ別名になおして読むのは不自然だろう。

#### softmax　
ソフトマックス
　引数(argument)の中でどれが最大(Max)かを示す関数を滑らか(soft)にしたもの。 後でargmaxという関数も出てくる

#### MNIST
エムニスト　
Modified National Institute of Standards and Technology database　
NISTとは、米国の技術や産業、工業などに関する規格標準化を行っている政府機関であるアメリカ国立標準技術研究所　
NISTが作ったデータベースを修正（modify)したもの？

#### predict
プリディクト
(…を)予言する、予報する


## ４章

#### 損失関数（loss function）
ロス・ファンクション
>損失関数はニューラルネットワークの性能の“悪さ”を示す指標です。現在のニューラルネットワークが教師データに対してどれだけ適合していないか、教師データに対してどれだけ一致していないかということを表します。

#### 交差エントロピー誤差（cross entropy error）


#### 勾配(gradient)　
グラジエント

#### 学習係数（learning rate）
ラーニング・レイト
 $\eta$　イータ →[ギリシャ文字の読み方](https://www.fbc.keio.ac.jp/~tyabu/enders/greek.pdf)



#### 微分
```math
\frac{dy}{dx}  　　 ディーワイディーエックス
```
#### 偏微分　
```math
\frac{\delta f}{ \delta x} 　　 デルエフデルエックス
```
#### iter_per_epoch 
イテレーション iteration 反復
この本では　訓練データ件数 ÷ バッチデータ件数
１エポックの中で、イテレーション回数、バッチを繰り返せば、すべてのデータを見たことになります。

## ５章
#### backward propagation 逆伝播
バック・プロパゲーション　という語で説明する本も多い


#### レイヤ（Layer）
層
Lay(平らに積む)
コスチューム・プレイヤーの省略形ではないらしい

#### Affine　
アフィン　アフィン変換とかアフィン空間とかいう用語があるらしい
たぶん、アフィン結合のことではないかと

>wikipedia
与えられた体 K 上のベクトル空間 V において、その元 x1, …, xn の α1, …, αn を係数とするアフィン結合とは、係数和が 1, つまり $ ∑^n_{i=1}αi = 1 $ を満たすような線型結合
$ ∑^n_{i=1} αi xi = α1x1 + α2x2 + ・・・ + α_nx_n$
を言う。

keras では Dense という名前のようです。

## ６章

#### SGD　
エスジーディー　こういう、他に読みようがないものは分かりやすい
stochastic gradient descent
ストカスティック　グラジエント　ディセント　
確率的勾配降下法 最適なパラメータを見つけるための手法のひとつ
確率というよりも、ストックであてずっぽうに突いて、勾配が下がっている方向を探して進んでいく感じ

#### Momentum 
モーメンタム
 運動量　最適なパラメータを見つけるための手法のひとつ

#### AdaGrad　
アダグラド　？　元の語の読みをつなげると、こうなります。
Adaptive Subgradient Methods　
アダプティブ　サブグラジエント　メソッド　劣勾配を適応させる手法？
最適なパラメータを見つけるための手法のひとつ

#### Adam　
アダム
　AdaGrad と Momentum を融合？
最適なパラメータを見つけるための手法のひとつ


#### 標準偏差が0.01 のガウス分布
ガウス分布は正規分布ともいう。
正規分布の中でもμ（ミュー　平均値）=0、$σ^2$（シグマ二乗　分散）=1の分布を標準正規分布と呼び、Numpyライブラリのrondomモジュール内のrandnメソッドで生成できる。

```python
np.random.randn(node_num, node_num)
```
また、normalメソッドを使えば、randnと違い、 μ（平均値）と σ（シグマ　標準偏差）を任意で指定した正規分布に従う乱数配列を生成することができる。

```python
np.random.normal(loc=0, scale=0.01, size=(node_num, node_num)) 
```

しかし、P178ではnormalメソッドではなく、randnメソッドを使っています。
>P178
これまで、重みの初期値は、
0.01 * np.random.randn(10, 100) のように、ガウス分布から生成される値を0.01 倍した小さな値――標準偏差が0.01 のガウス分布――を用いました。

この辺、私は詳しくないのですが、正規分布するXを標準化して標準正規分布Zに変換したとき
 $Z = \frac{X - μ}{σ} $ となるらしいので、平均μ＝０、標準偏差σ＝０．０１なら、
 $Z = \frac{X}{0.01} $ なので
 $X = 0.01 ×Z$
ということでしょうか？

μ　ミュー
σ　シグマ

Kerasレイヤーの重み初期化では、 
keras.initializers.RandomNormal(mean=0.0, stddev=0.01, seed=None)


#### 表現力の制限
>P182
各層のアクティベーションの分布は、適度な広がりを持つことが求められます。
なぜなら、適度に多様性のあるデータが各層を流れることで、ニューラルネット
ワークの学習が効率的に行えるからです。逆に、偏ったデータが流れると、勾
配消失や「表現力の制限」が問題になって、学習がうまくいかない場合があり
ます。

representation　？ 　唐突に現れた「表現力」という語の意味がよくわからなかったので、いくつか参考になりそうな文献を探してみた。

>表現力とは機械学習モデルが近似できる関数集合の広さを表す概念
→[残差スキップ接続をもつ深層ニューラルネットの表現力に基づく数理解析と設計](https://www.jstage.jst.go.jp/article/jsiamt/30/1/30_45/_pdf)

>ニューラルネットワークに関して最も衝撃的な事実の1つは任意の関数を表現できることです。 例えば誰かから複雑で波打った関数f(x)を与えられたとします：それがどんな関数であっても、考えられるすべての入力xに対して、 出力値がf(x)（もしくはその近似）であるニューラルネットワークが存在します。
→[ニューラルネットワークが任意の関数を表現できることの視覚的証明](https://nnadl-ja.github.io/nnadl_site_ja/chap4.html)

>三層パーセプトロンでも中間層のユニット数を無限に増やせば任意の関数を任意の精度で近似できる．ではなぜ深い方が良いのか？ 深さに対して指数的に表現力が増大するから
→[機械学習技術とその数理基盤](http://ibis.t.u-tokyo.ac.jp/suzuki/lecture/2018/ML_Gairon/ML_Gairon_02.pdf)


#### Xavier の初期値　
研究者の名前　Xavier Glorot　から
ザビエル　？
宣教師？
前層のノードの数がn 個の場合、$\frac{1}{\sqrt n}$ を標準偏差とするガウス分布

Kerasレイヤーの重み初期化では、 glorot_normal 


#### He の初期値　
研究者の名前　何恺明(Kaiming He)　から。
何？
フー？　
前層のノードの数がn 個の場合、$\sqrt\frac{2}{n}$ を標準偏差とするガウス分布

Kerasレイヤーの重み初期化では、 he_normal 


#### tanh関数
ハイパボリックタンジェント 双曲線関数
$\tanh x=\frac{\sinh x}{\cosh x}$
![6-6.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/686010/c5795aa1-33b7-a212-4ae3-066768677936.jpeg)

#### Batch Normalization
~~バッチ　ノーマリゼーション~~　バッチノーマライゼイション

米国英語だと、ノーマリゼーションという発音もありのようですが、元の語　normalize がノーマライズとしか読めないので、ノーマライゼーションが正しいようです。
 
>Batch Norm は、その名前が示すとおり、学習を行う際のミニバッチを単位として、ミニバッチごとに正規化を行います。具体的には、データの分布が平均が0 で分散が1 になるように正規化を行います。

標準化したいデータ集合をX、その平均がμ、標準偏差σ（だから分散は$σ^{2}$)
標準化したデータをZとすると、
 $Z = \frac{X - μ}{σ} = \frac{X - μ}{\sqrt{σ^{2}}}$ となるらしい
これについてのコードは、
Batch Norm に対応しているニューラルネットのクラスが commonフォルダの中の　multi_layer_net_extend.py 、そこから参照している layers.py で定義しているクラス BatchNormalization にあります。

```python
        if train_flg:
            mu = x.mean(axis=0)
            xc = x - mu
            var = np.mean(xc**2, axis=0)
            std = np.sqrt(var + 10e-7)
            xn = xc / std
```


#### 初期値にロバスト
robust 〈人・体格など〉強健な，たくましい，がっしりした

>P259
ここで言うロバスト性とは、たとえば、ニューラルネットワークは、入力画像に
小さなノイズがのってしまっても、出力結果が変わらないような頑健な性質がある
ということです。そのようなロバスト性のおかげで、ネットワークを流れるデータを
“劣化”させても、出力結果に与える影響は少ないと考えることができます。

#### 過学習 overfitting
オーバーフィッティング
訓練データにだけ、ぴったり合うように学習し過ぎてしまった。

#### Weight decay
ウェイト　ディケイ　荷重減衰
過学習しないように、重みを衰えさせる

#### L2 ノルム(norm)
いろいろなものの「大きさ」を表す量
M 次元のベクトル x の p 次ノルムとは以下で定義される量です。

```math
∥x∥_p =(∑^M_i|x_i|^p)^{1/p}= \sqrt[p]{|x_1|^p + · · · + |x_M|^p} 
```
L2ノルムは、M次元のベクトルｘの２次ノルム

```math
∥x∥_2 =(∑^M_i|x_i|^2)^{1/2}= \sqrt{|x_1|^2 + · · · + |x_M|^2} 
```
これが２次元のとき、こうなります。

```math
∥x∥_2 = \sqrt{x_1^2 + x_2^2}
```
これって、ピタゴラスの定理と見れば、直角三角形の斜辺の長さのことになる。
２乗してルートをはずすと

```math
r^2 = x^2 + y^2
```
となって、原点を中心とする半径ｒの円の方程式になります。

で

>重みをWとすれば、L2 ノルムのWeight decay は、$ \frac{1}{2}\lambda\ W^2 $ になり、この$ \frac{1}{2}\lambda\ W^2 $ を損失関数に加算します。

ということなので、 $ 0.5 × λ ×（w_1^2 + · · · + w_M^2） $ を損失関数に加算します。
イメージとしては損失関数０の場所（オーバーフィッティングになってしまう場所）を原点とした円を描いて、そこに向かって学習するけれど、円周の中には入れない、という感じ？　訓練データに例外データが混ざっていて例外に合わせようとして重みｗが大きくなると、円も大きくなって学習するのをジャマをし、例外データを無視して重みｗが小さくなると円も小さくなって学習のジャマをしない、ということか？

λ　ラムダ　Weight Decay（L2ノルム）の強さ

#### Dropout
ドロップアウト　過学習を抑制するため、ニューロンをランダムに消去しながら学習する手法

#### ハイパーパラメータ（hyper-parameter）
各層のニューロンの数やバッチサイズ、パラメータの更新の際の学習係数やWeight decay など

#### スタンフォード大学の授業「CS231n」
[CS231n: Convolutional Neural Networks for Visual Recognition](http://cs231n.stanford.edu/)

## ７章

#### CNN　convolutional neural network
シーエヌエヌ　こういう、他に読みようがないものは分かりやすい
畳み込みニューラルネットワーク
convolutional　コンボリューショナル　渦を巻いている

#### Convolution レイヤ
コンボリューション　渦巻き
フィルタが入力データの上をぐるぐる回っていく感じ？

日本語では「畳み込み」になっているけれど、これは折り紙のように畳んでいくというイメージからなんでしょうか？

#### パディング（padding）
pad 形を整えるための詰め物、平たく形を整えた物
インド映画「パッドマン」では、パッドというのは女性生理用品のことだった。
入力データの周辺に０を詰めて形を整える

#### ストライド（stride）
~をまたぐ
大きな歩幅でまたいでいく感じ。
指輪物語のアラゴルンの俗称がストライダーだが、大きな歩幅で歩く人という意味。瀬田貞二訳では「馳夫」。日本語訳の名前にすることはいいと思うのだが、速いという面が強調されすぎてて、足が長い＝背が高い、という面が欠けてしまっている。後になって実は王様だったとか、映画になったときの役者のイメージと、ずいぶん違うように思うのだが。

#### Poolingレイヤ
プーリング　
共同利用する


#### im2col
image to column の略記だから、　イムトゥカル　？
画像から行列へ
phpでも形式を変換する関数で、toを2に変えた名前のものがけっこうある。

#### エッジ(edge)やブロブ(blob)などのプリミティブ(primitive)な情報

#### LeNet
ルネット　？　フランス語読みなら Le はルと読む。
フランス人のYann LeCun（ヤン・ルカン）がつくった畳み込みニューラルネットワーク

#### AlexNet
アレックスネット
Alex Krizhevsky がつくった畳み込みニューラルネットワーク


## ８章

#### Data Augmentation
データ・オーグメンテーション(増加）

#### NVIDIA
エヌビディアコーポレーション
コンピュータのグラフィックス処理や演算処理の高速化を主な目的とするGPUを開発し販売する半導体メーカー

#### FCN（Fully Convolutional Network）
エフシーエヌ　フリー・コンボリューショナル・ネットワーク
「すべてが畳み込み層から構成されるネットワーク」

#### バイリニア補間による拡大
Bilinear
Bi(二つの方向から)リニア（直線的）に補間する

#### デコンボリューション（逆畳み込み演算）
deconvolution
de- 否定、逆転　

#### NIC （Neural Image Caption）
エヌアイシー？　ニック？
ニューラル・イメージ・キャプション


#### マルチモーダル処理
Multimodal 


#### DCGAN（Deep Convolutional Generative Adversarial Network）
ディーシー・ギャン？ ガン？ 英語読みだと　ギャン　になると思うが。
畳み込みニューラルねとワークを使ったGAN（画像生成モデル）

ジェネレイティブ（生成）アドバーサリアル（敵対的）ネットワーク
>P268
Generator（生成する人）とDiscriminator（識別する人）と呼ばれる2 つのニューラルネットワークを利用して、・・・
両者を競わせるように学習させていくことで、Generator は、より精巧な騙し画像の技術を学習し、Discriminator は、より高精度に見破ることができる鑑定師のように成長していく

#### Deep Q-Network（通称、DQN）
ディーキューエヌ？
さすがに、ドキュンとは読まないと思うが・・・

# 2巻目　自然言語処理編
## １章
#### GPU(Graphics Processing Unit)
ジーピーユー　グラフィックス プロセッシング ユニット

もともとは画像処理用演算装置なのだが、並列処理に強いため、ＡＩに使うようになったらしい。

#### CuPy
クーパイ？
CuPy is an implementation of NumPy-compatible multi-dimensional array on CUDA.

CUDA(クーダ)上で、NumPy互換の多次元配列を使えるようにするPythonライブラリ。
Google Colaboratory では、インストールしなくても使えるようです。
ノートブックを開き、[編集]>[ノートブックの設定]>ハードウェアアクセラレータ>GPU を選択

## 2章

#### スタンフォード大学の授業「CS224d」
[CS224d: Deep Learning for Natural Language Processing](https://cs224d.stanford.edu/)

#### You say goodbye and I say hello.
The Beatles の歌「Hello,Goodbye」の一節

#### 単語の分散表現

Qiitaの記事より 
[なぜ自然言語処理にとって単語の分散表現は重要なのか？](https://qiita.com/Hironsan/items/a58636f946dd51f670b0)
[自然言語処理における単語分散表現（単語ベクトル）と文書分散表現（文書ベクトル）](https://qiita.com/kenta1984/items/6dc327c31b6c36e66863)

#### コサイン類似度（cosine similarity）
数式は理解できませんが、２つのベクトルの間の角度のことだと考えれば、なんとなくわかります。
![dl5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/686010/8b93e6f8-4e0d-fa55-fa3e-5c84c3feb02c.png)


#### 相互情報量（Pointwise Mutual Information）

#### SVD 特異値分解（Singular Value Decomposition）

特異値分解の内容はまったく理解できていないが、行列Ｘを次のような３つの行列の積に分解できるということなので、これを利用すると次元削減できるというのは、わからないでもない。
![2-3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/686010/701a4398-2c7c-e71a-8e53-e401a8581cf3.jpeg)

行列Ｓ（たぶんシグマのこと）の要素は、σ1≧σ2≧・・・≧σr＞0　で、これら以外は全部０。
と言う事なので、このσで掛け算される以外の要素は０になってしまう。
だから、行列Ｕはｍ×ｒだけでよいことになる。
さらに、σは値が大きい（重要度）順に並んでいるから、要素の最初のほうだけを残して、あとは削っても大きな問題は無い、と考えていい。


#### PTB データセット

## 3章
#### word2vec
ワード・トゥ・ベク
単語をベクトルに変換する
[Googleコード word2vec](https://code.google.com/archive/p/word2vec/)

#### CBOW(continuous bag-of-words)モデル
シーバウ

continuous 切れ目のない、とぎれない

bag-of-words 語の袋
文書検索システムで従来使われている手法で、文書中の語から索引語の集合を作り、与えられた検索語の集合あるいは質問文から作られた検索語の集合と比較照合するもの。

>P177
CBOWモデルの学習の本来の目的は、コンテキストからターゲットを
正しく推測できるようになることです。この目的を達成するために学習を進めると、
（その副産物として）単語の意味がエンコードされた「単語の分散表現」が得られま
した。

#### skip-gram モデル
スキップ・グラム
gram＝文字 をスキップする 

## 4章
#### Embedding レイヤ
embed エンベッド　埋め込む
Tensor Flow サイトより [単語の埋め込み](https://www.tensorflow.org/tutorials/text/word_embeddings?hl=ja)

#### Negative sampling

#### transfer learning 転移学習

#### SVM　Support Vector Machine
1995年頃にAT&TのV.Vapnikが発表したパターン識別用の教師あり機械学習方法

## 5章
#### RNN Recurrent Neural Network リカレントニューラルネットワーク

Recurrent 繰り返し起こる



h は hidden state の h

#### 言語モデル（Language Model）



#### BPTT  Backpropagation Through Time
バックプロパゲーション
時間方向に展開したニューラルネットワークの誤差逆伝播法



#### Truncated BPTT


## 私の自習メモ
[その１　ディレクトリー、フォルダの配置とか](https://qiita.com/slow_learner/items/8272450c2b876fdc690c)
[その２　パーセプトロン、半加算器、全加算器](https://qiita.com/slow_learner/items/7caefc9ff17b4f543b15)
[その３　MNISTデータセット](https://qiita.com/slow_learner/items/9447c5717d52d3e60930)
[その４　推論処理](https://qiita.com/slow_learner/items/d914454ecee154e98cd2)
[その５　学習処理](https://qiita.com/slow_learner/items/4e799af75779e35abca9)
[その６　Fashion MNIST](https://qiita.com/slow_learner/items/5589a95081d30f82fbbd)
[その６　Kaggleの猫と犬](https://qiita.com/slow_learner/items/95603dcbe8784036fadb)
[その６　９未満か９以上か](https://qiita.com/slow_learner/items/3b7d3b8f4c7821a2b617)
[その７　なんで2分の1？](https://qiita.com/slow_learner/items/efbe24999562c3630c93)
[その８　MatPlotLib](https://qiita.com/slow_learner/items/d770bc712c96f0ec3b69)
[その９　MultiLayerNet クラス](https://qiita.com/slow_learner/items/16b4cad06782abeb98d5)
[その10　MultiLayerNet クラス](https://qiita.com/slow_learner/items/cfca161fb2fb05216a74)
[その１１ CNN](https://qiita.com/slow_learner/items/d4c36e3701e16c5a9e77)
[その１２ ディープラーニング](https://qiita.com/slow_learner/items/ed10b1964c33e76235f3)
[その１３　Google Colaboratory](https://qiita.com/slow_learner/items/ccf0a35bcb1a0d628669)
[その１４ Colaboratoryで4章のプログラムを動かす](https://qiita.com/slow_learner/items/c422bd3d06c86bf0beec)
[その１５ TensorFlowの初心者向けチュートリアル](https://qiita.com/slow_learner/items/f9ba7f84053684da750a)
[その１６ SimpleConvNet を Keras で構築](https://qiita.com/slow_learner/items/28a8025c9b881491e3be)
[その１７ DeepConvNet を Keras で構築](https://qiita.com/slow_learner/items/675fbedc932e850db4e8)
[その１８ Grad-Cam](https://qiita.com/slow_learner/items/a62421e5110cf925e503)
[その１９ Data Augment](https://qiita.com/slow_learner/items/2ede37e1af655775cc1e)
[その１９の２ 続き](https://qiita.com/slow_learner/items/b705e5cf89a271b9f8d1)
[その２０　自然言語処理編](https://qiita.com/slow_learner/items/bb0ce93a4577bc7f1105)
[その２１　３、４章](https://qiita.com/slow_learner/items/346f78ae415f649f54ed)

# 参考にしたサイト
[ギリシャ文字の読み方](https://www.fbc.keio.ac.jp/~tyabu/enders/greek.pdf)
[Qiitaの数式チートシート](https://qiita.com/PlanetMeron/items/63ac58898541cbe81ada)
[【機械学習】LPノルムってなんだっけ？](https://qiita.com/kenmatsu4/items/cecb466437da33df2870)