DeepLearning勉強会 - 講義ノート1

What is Deep Learning?

  • Vincent先生はGoogleのサイエンティストで、機械学習・AIを研究しています。
  • ディープラーニングは機械学習分野の一部で、データをたくさん・たくさん使って、人間しかできなかったことをコンピューターに教えることです。
  • 最近、ディープラーニングがコンピュータービジョン・音声認識のほか、たくさんの分野に応用されます。例えば、新薬の発見、自然言語理解、検索結果のランキングなどです。

Course Overview

image

大きくは4つのレッスンがあります。

1. 機械学習からディープラーニングへ
  • logistic classification
  • stochastic optimization
  • data & parameter tuning
2. ディープニューラルネットワーク
  • deep networks
  • regularization
3. 畳み込みニューラルネットワーク
4. テキストとシーケンスのためのディープモデル
  • embeddings
  • recurrent models

まずはレッスン1を始めましょう!

Solving Problems - Big and Small

昔、音声認識・コンピュータービジョンなどの各分野には全然違うテクニックを使っていました。でも今のディープラーニングはどこでも応用できます。

Let's Get Started

  • ニューラルネットワークは1980~1990に出現されました。でも、そのごろ、コンピューターは遅く、データは少なかったので何も応用できなかったです。そのため、ニューラルネットワークは長い間機械学習の世界から消えていました。
  • 最近(2009から)ニューラルネットワークはまた注目されてきました。その原因は:
    • たくさんのデータがある
    • 安いと速いGPUの普及 (ゲーマーさん、ありがとう!)
  • 今はディープラーニングはどこでも見られます。

Supervised Classification

Classification(分類)はある入力、例えば文字、にラベルを与える、例えば「B」、のタスクです。たくさんのデータ(training set・学習セット)を利用して、新しいものの分類を推測します。

Training Your Logistic Classifier

  • Logistic ClassifierはLinear Classifierとも呼びます

入力ベクトル$X$から出力ベクトル$Y$を予測問題を考えます。 例えば、ある文字認識の問題で、$X$は画像ピックセルで、$Y$はa, b, cという文字の中の1つです。 Logistic Classifierは$Y$と$X$の関係が線形関数で表せるのを仮定します。すなわち、

$$ WX + b = Y
$$

になります。

ここで$W$は重み行列、$b$はバイアスベクトルです。 目的は$Y$が一番正しい結果を得るために、$W$と$b$を求めることです。

これは一番単純なモデルです。

予想結果の評価にはスコアという概念があります。高いスコアほど結果が正しいようです。

以上の例で、例えばある画像はラベル$(a, b, c)$に応じてスコアが $(2.0, 1.0, 0.1)$ です。$2.0$が一番高いですからその画像はaでしょう。

また、確率という概念もあります。一般的に高いスコアは高い確率で、低いスコアは低い確率になります。統計学で学んだように確率の和は1です。

スコアから確率に変換するには、softmax関数を使います。スコアが $(y_ 1, y_ 2, \ldots ,y_ n)$ と確率が$ \big(s(y_ 1), s(y_ 2), \ldots ,s(y_ n)\big) $を記号すると、softmax関数は

$$ s(y_ i) = \frac{\exp(y_ i)}{\sum_ j \exp(y_ j)}
$$

になります。

Logistic Regressionにおいて、スコアはlogitsとも呼びます。

Quiz: Softmax関数の実装

"""Softmax."""

scores = [3.0, 1.0, 0.2]

import numpy as np

def softmax(x):  
    """Compute softmax values for each sets of scores in x."""
    return np.exp(x) / np.sum(np.exp(x), axis=0)


print(softmax(scores))

## Plot softmax curves
import matplotlib.pyplot as plt  
x = np.arange(-2.0, 6.0, 0.1)  
scores = np.vstack([x, np.ones_ like(x), 0.2 * np.ones_ like(x)])

plt.plot(x, softmax(scores).T, linewidth=2)  
plt.show()

結果:

[ 0.8360188   0.11314284  0.05083836]

image

softmaxの実装部分はNumPy 覚え書きで山本先生が説明してくれるはずなのでパスします。

プロットの実装部分はNumPy・matplotlibまだ慣れていないのでちょっとややこしいかもしれません。アイデアとしては

  • xは$[-2.0, -1.9, ..., 6.0]$
  • np.ones_ like(x)は$[1.0, 1.0, ..., 1.0]$
  • 0.2 * np.ones_ like(x)は$[0.2, 0.2, ..., 0.2]$
  • scores

$$ \left[ \begin{array}{ccc} -2.0, & -1.9, &\ldots, &6.0 \ 1.0, &1.0, &\ldots, &1.0 \
0.2, &0.2,&\ldots, &0.2 \
\end{array} \right] $$

このscoressoftmax計算してプロットします。図の中にはは青線はx、緑線は1.0、赤線は0.2です。xのはじめはスコアが一番小さいから確率は0に近いですが、どんどん大きくなって、最終は1に近づきますね。他の線はスコアが変わりませんが、xのスコアが変わったせいで確率がどんどん小さくなります。どの時点にしても確率の和は1という性質も確認できますね。

Quiz: softmaxの大事な性質

  • もしscoresの全部に10倍をかけると、確率は1か0に近づく
  • もしscoresの全部に10倍を割ると、確率は一様分布に近づく

One-Hot Encoding

ラベルをベクトル化します。1つの要素を1にし、残りは0にします。 例えば$(a,b,c)$の3つのラベルがあります。

  • aのベクトルは$[1,0,0]$
  • bのベクトルは$[0,1,0]$
  • cのベクトルは$[0,0,1]$

このベクトル化作業(ベクトルにマッピングする)はOne-Hot Encodingといいます。

Cross Entropy

確率ベクトル$S$とラベルベクトル$L$の距離です。以下の公式で計算されます。

$$ D(S,L)=-\sum_ i L_ i\log(S_ i)
$$

ここで$D$は距離です。$D$が小さいほど、$S$と$L$が近く(値が同じに)なります。

今までのまとめ

image

Minimizing Cross Entropy

ロス関数(loss function)1:は学習セットのcross entropyの平均。すなわち、

$$ loss = \frac{1}{N}\sum_ i D\big(S(WX_ i+b),L_ i\big)
$$

となります。 ここで、$N$はデータ数、$i$は$i$番目のデータです。

学習データ$X$とラベル$L$はもう決まっているので、lossの値は$W$と$b$に依存します。lossは小さければ小さいほど、予想結果とラベルが近くなるので、結局の問題はlossを最小化するように$W$と$b$を求めます。

これを解決するのは一番簡単な手法はgradient descent(最急降下法)です。この手法を理解するために、Courseraの機械学習コースWeek1を見ましょう!2

  1. cost functionとも言います

  2. https://class.coursera.org/ml-005/lecture