読者です 読者をやめる 読者になる 読者になる

アプリとサービスのすすめ

アプリやIT系のサービスを中心に書いていきます。たまに副業やビジネス関係の情報なども気ままにつづります

書籍『Tensorflowで学ぶディープラーニング入門』の内容まとめ(2章〜5章)#多層ニューラルネットワーク(CNN)で何ができるようになるか

機械学習

前記事の続きです。この記事では書籍『Tensorflowで学ぶディープラーニング入門』の2〜5章を学んで、Tensorflowで何ができるようになるかをまとめています。

あくまで学習メモですが、この書籍を通してTensorflowがどこまで学べるかの参考にしてもらえればと思います。

前置については前記事をご覧ください。2〜5章は多層ニューラルネットワーク(CNN)の全体像を理解し、CNNをコードで実装できるようになる内容です。

この書籍ではMNISTという画像のデータセットを用いて、CNNを実装していきながら全体像を理解する構成になっています。この記事では2〜5章でCNNの理解を通し、「何ができるようになるのか」を淡々と書いていきます。

あくまで学習メモですので、専門用語が出てきますが、なるべくわかりやすく書いたつもりです。




最適化アルゴリズムの実装
機械学習では
・教師ありアルゴリズム
・教師なしアルゴリズム

に大きく分かれます(正確には強化学習アルゴリズムもあり)。ディープラーニングを扱うTensorflowは「教師ありアルゴリズム」が対象になります。

1章のまとめ記事でみたように「教師ありデータアルゴリズム」の基本的なステップは
①与えられたデータを元にして、未知のデータを予測する数式を立てる
②2乗誤差関数(損失関数)を求める
③勾配降下法を使って2乗誤差関数を最小にする

の3つです。『Tensorflowではじめるディープラーニング入門』ではTensorflowを学べるので、このアルゴリズムをコードで実際に実装することが可能になります。





多層ニューラルネットワーク(CNN)の実装
ディープラーニングのほんどのモデルはCNNです。他にもRNNやLSTMなどがありますが、ディープラーニングでは圧倒的にCNNが主流です。

f:id:trafalbad:20170320124339j:plain
CNNの全体図

CNNを構成する
・ソフトマックス関数
ドロップアウト
・全結合層
・プーリング層
・畳み込みフィルター

をコードにより実装することが可能になります。Tensorflowでは各層やフィルターの役割を果たす関数が用意されています。それらは独立して紹介されていますが、それらを実際に組み合わせることでCNNを構成することができます。

これで単純な話、ディープラーニングをコードで実装できる。

*単層ニューラルネットワークも構築可能
また全結合層とソフトマックス関数だけからなる単層ニューラルネットワークも構築できます。これにプーリング層などを加えればCNNになりますが、単層ニューラルネットワークを実装することにより基本的な、ニューラルネットワークの構造を理解できる。



最尤推定法のテクニックが身につく
最尤推定法とは統計学では「与えられたデータが正しい確率を最大化する」方法と言われています。いわゆるロジスティック回帰を難しく言い換えただけですが、この本ではこの言い方になってるのでこう書きました。

要は3ステップの計算式を少しいじくった数式で値を求めた後、ソフトマックス関数で出力値を0〜1の値に変換し、確率問題として扱います。単純に0.5以上であれば確率が高くなります。

ソフトマックス関数だけでなく、最尤推定法にのっとった数式をコードで表現する必要がありますが、そのテクニックが身につきます。
この最尤推定法のテクニックが身につけば、MNISTのような与えられたデータ(トレーニングセット)がテストセットに対する正解率を最大化するテクニックが身につくことになります。



オーバーフィッティング防止テクニック
ディープラーニングの目的は本来、未知のデータに対応できる力(汎用力)をコンピュータに身につけさせるためです。しかし、トレーニングセットのデータにだけ慣れすぎてしまい、汎用力が身につかないことがあります。これを「オーバーフィッティング」といいます。

これを防止する方法として、
・勾配降下法の学習率を設定する方法

・データセットの20%くらいをテストセット用に分けて使用する方法
が紹介されており、この2つのテクニックが身につきます。実際にコードで実装しているので、どのようにすればいいかもわかりやすいはずです。




確率的勾配降下法
与えられたデータセットかとてつもなくデカイ場合、普通の勾配降下法では時間がかかりすぎてしまいます。それを防ぎ、時間を短縮して勾配降下法を行える「確率的勾配降下法」のテクニックが可能になります。

f:id:trafalbad:20170320124552j:plain



ミニバッチ学習
こちらもデータセットがとてつもなくデカイ場合、全てに損失関数を適用して勾配降下法を用いるアルゴリズムを適用していてはとても時間がかかります。

そこで一部のデータだけをランダムで抜き出し、損失関数を適用するアルゴリズムを用いて全体の近似としてみなす方法がミニバッチ学習です。

f:id:trafalbad:20170320124607j:plain

例えばMNISTデータセットなら60000枚の画像データから200枚を選び出し、学習させます。

実際にどうやるかというコード例までのっていて、よくわかります。




プーリング層と畳み込みフィルターによるCNNの精度の向上

CNNを構成するプーリング層と畳み込みフィルターは、それらをどのように組み合わせるかで、CNNの精度が変わります。精度が向上するということは、テストセットに対するトレーニングセットの正解率が高まるということ。

プーリング層では画像などのデータの特徴的な性質(特徴変数)を抽出し、畳み込みフィルターで特徴変数を分類する役割を持ちます。

プーリング層と畳み込みフィルターを組み合わせることで、MNISTデータセットでは97%の正解率を達成しています。




Tensorflowで学ぶディープラーニング入門で習得できるテクニックはこんなところです。もっと書籍を細部まで噛み砕けば、別なテクニックも見つかるかもしれませんが一通り学んだ上でできることはこんなところです。

Tensorflowのチュートリアル5以降はもっと別の書籍やサイトで勉強する必要があります。またここで紹介したCNNは最も基本的なものであり、正規層などを組み込んだもうちょっと発展的なCNNもあります。

関連記事はこちら

trafalbad.hatenadiary.jp



trafalbad.hatenadiary.jp

書籍『Tensorflowで学ぶディープラーニング入門』まとめ(1章)#Tensorflowコードの基本的な使い方

機械学習

この記事は前の記事の続きで書いてます。前記事はこちら
trafalbad.hatenadiary.jp




Tensorflowの基本的な使い方



ここでは機械学習の基本「最適化アルゴリズム」の3ステップをTensorflowで実際に実装していきます。(ディープラーニングは「最適化アルゴリズム」の応用です)



「最適化アルゴリズム」の3ステップをTensorflowのコードで表現する

前記事で見た、ある土地の平均気温を求める問題をまた取り上げます。


「最適化アルゴリズム」の3ステップは次のようにものでした。
①与えられたデータを元にして、未知のデータを予測する数式を立てる
②2乗誤差関数(損失関数)を求める
③勾配降下法を使って2乗誤差関数を最小にする

そのうちの①では、与えられたデータから数式を立てます。
{y=w_{0}+w_{1}x+w_{2}x^{2}+w_{3}x^{3}+w_{4}x^{4}}
Tensorflowは多次元配列(行列)同士の計算になるのでベクトル表記になります。上の式を表すと

{\begin{equation}
\mbox{x} \times \mbox{w} =\mbox{y}
\end{equation}}
となります。ここでyが予測気温、xが何月かを表します。ここでwは「最適化のパラメーター」で、これが予測気温を求めるのに一番重要な値です。「最適化アルゴリズム」でこのwを求めれば、yの予測気温が求まります。

そしてトレーニングセットとして過去の平均気温データをtとして用意します。
{\begin{equation}
  t= \left(
    \begin{array}{rr}
      t_1 \\
      t_2\\
      \vdots \\
      t_{12}
    \end{array}
  \right)
\end{equation}}

このyとtを元に、最適化アルゴリズムのステップ②である2乗誤差関数(損失関数)を求めます。
{y=\displaystyle \sum_{ σ= 1 }^{ 12 }(y-t)^{2}}

ここまででステップ②まで終わりました。
後はステップ③の勾配降下法を行えばOK



機械学習の3ステップに必要なTensorflowコード
ここで今見てきた3ステップをTensorflowコードで表現します。

Tensorflowではトレーニングセットに当たるデータはplaceholderクラスでインスタンス化(placeholderクラスをxに代入)します。

x = tf.placeholder(tf.float32, [None, 5])

ここではコードの意味は追求せずに、3ステップをTensorflowで表現する流れだけを見ていきます。

そして最適化のパラメーターwはvariableクラスでインスタンス化。

w = tf.Variable(tf.zeros([5, 1]))

そしてy=xwは

y = tf.matmul(x, w)

matmulクラスは行列同士の演算をするクラス。
さらにトレーニングセットのtは

t = tf.placeholder(tf.float32, [None, 1])

これで2乗誤差関数を求め、lossに格納します。

loss = tf.reduce_sum(tf.square(y-t))

ここまででステップ②まで終わりました。

後はステップ③を次のコードで行います

train_step = tf.train.AdamOptimizer().minimize(loss)

これで機械学習の3ステップに必要なコードが揃いました。



セッションに具体的な値を代入してトレーニングを行う
今まで用意してきたのは「最適化アルゴリズム」の3ステップに必要なTensorflowのコードですが、これには具体的な数値が入ってません。
いわば中身がない空っぽの箱です。「最適化アルゴリズム」の3ステップを行うには、これに具体的な数値を代入する必要があります。

Tensorflowでは「最適化アルゴリズム」の3ステップを行う環境として「セッション」を用意する必要があります。セッションとは英語で「一定の期間」みたいな意味があり、このセッション内で「最適化アルゴリズム」を行います。

ある変数で「最適化アルゴリズム」を行ない、また別の新しい変数で「最適化アルゴリズム」を行う場合、さらに別のセッションを新しく作ります。こうして変数毎にセッションを用意して最適化アルゴリズムを行うのがTensorflowです。


f:id:trafalbad:20170320115636j:plain
セッション毎に変数を管理する。

そのセッションはコードでは次のように書きます。

sess = tf.Session()
sess.run(tf.initialize_all_variables())

2行目ではセッションのwの値、つまりvariableクラスを初期しています。




「最適化アルゴリズム」の3ステップをやってみる
ここで最適化アルゴリズムを実際にやってみます。あくまで雰囲気だけつかめればと思います。

まずステップ①②で用意した式に値を代入していきます。

train_t = np.array([5.2, 5.7, 8.6, 14.9, 18.2, 20.4,
                    25.5, 26.4, 22.8, 17.5, 11.1, 6.6])
train_t = train_t.reshape([12,1])

train_x = np.zeros([12, 5])
for row, month in enumerate(range(1, 13)):
    for col, n in enumerate(range(0, 5)):
        train_x[row][col] = month**n

そしてステップ③を行います。勾配降下法で最適化するわけです。これでwの値が求まり、予測気温が求まります。
ここではトレーニングアルゴリズムを1万回行い、その時点での2乗誤差関数の値を表示しています。(stepが回数、lossが二乗誤差関数の値)

i = 0
for _ in range(100000):
    i += 1
    sess.run(train_step, feed_dict={x:train_x, t:train_t})
    if i % 10000 == 0:
        loss_val = sess.run(loss, feed_dict={x:train_x, t:train_t})
        print ('Step: %d, Loss: %f' % (i, loss_val))

>>>
Step: 10000, Loss: 31.014391
Step: 20000, Loss: 29.295158
Step: 30000, Loss: 28.033054
Step: 40000, Loss: 26.855808
Step: 50000, Loss: 25.771938
Step: 60000, Loss: 26.711918
Step: 70000, Loss: 24.436256
Step: 80000, Loss: 22.975143
Step: 90000, Loss: 22.194229
Step: 100000, Loss: 21.434664#出力結果

さらにもう一万回トレーニングアルゴリズムを行います。

for _ in range(100000):
    i += 1
    sess.run(train_step, feed_dict={x:train_x, t:train_t})
    if i % 10000 == 0:
        loss_val = sess.run(loss, feed_dict={x:train_x, t:train_t})
        print ('Step: %d, Loss: %f' % (i, loss_val))

>>>
Step: 110000, Loss: 20.749628
Step: 120000, Loss: 20.167929
Step: 130000, Loss: 19.527676
Step: 140000, Loss: 18.983555
Step: 150000, Loss: 18.480526
Step: 160000, Loss: 18.012512
Step: 170000, Loss: 17.615368
Step: 180000, Loss: 17.179623
Step: 190000, Loss: 16.879869
Step: 200000, Loss: 20.717033#出力結果

ここら辺で打ち切りましょう。ここでwの値がどのようになっているか確認します。下の式のwの値ですね。

w_val = sess.run(w)
print w_val

>>>
[[ 6.10566282]
 [-4.04159737]
 [ 2.51030278]
 [-0.2817387 ]
 [ 0.00828196]]#wの値

そして予測気温yを求める計算式にwを代入します。

def predict(x):
    result = 0.0
    for n in range(0, 5):
        result += w_val[n][0] * x**n
    return result

では予想気温を図で表示してみます。

fig = plt.figure()
subplot = fig.add_subplot(1,1,1)
subplot.set_xlim(1,12)
subplot.scatter(range(1,13), train_t)
linex = np.linspace(1,12,100)
liney = predict(linex)
subplot.plot(linex, liney)

f:id:trafalbad:20170320115455p:plain


これで最適化アルゴリズムの3ステップをTensorflowで行い、気温を予測できました。

これでTensorflowの基本的な使い方をまとめたつもりです。これで2記事になりましたが、『Tensorflowで学ぶディープラーニング入門』の1章のまとめは終わり。

2〜5章のまとめ記事では、2〜5章を学んでできるようになったことを淡々とまとめていきます。

書籍『Tensorflowで学ぶディープラーニング入門』の内容まとめ(1章)#Tensorflowコードの仕組みを理解する

機械学習

ディープラーニングを学ぶ上で、Google が提供するTensorflowの学習は避けて通れません。2015年に発表されてからまだ十分な学習環境が整っていないので、一部の書籍やネット上の情報で学ぶしかないのが現状です。今回はTensorflowのチュートリアルの1〜4までをカバーしてる(はずの)書籍『Tensorflowで学ぶディープラーニング入門』を読破したので、内容をまとめてみようと思います。

学習メモですが、なるべく理解度を上げるため汎用的に説明したつもりです。書評というより、「この本を通して何ができるか」をわかるように書きました。
また一記事にまとめると長くなるので、1章のまとめでは2記事にまとめ、Tensorflowの基本的な使い方を載せた記事はこちら


今回は1章を通してわかること、Tensorflowのコードの仕組みと機械学習の考えをまとめておきます。2〜5章は多層ニューラルネットワークの仕組みを理解しながら、テクニックを身につける内容ですが、詳細はこちらの記事。



目次
・この書籍がカバーしているTensorflowのチュートリアルの範囲
・Tensorflowの役割

この書籍がカバーしているTensorflowのチュートリアルの範囲



Tensorflowのチュートリアルは下記のようになっています。

 
Tensorflowチュートリアル
・MNIST For ML Beginners
・Deep MNIST for Experts
・TensorFlow Mechanics 101
・Convolutional Neural Networks

以下省略


上記の内容を簡易に要約すると

機械学習が始めての方はここから
・他のパッケージでDeep Learningに慣れていおり、MNISTも知っているならここから
・MNISTを使って、もう少し規模を大きくしてTensroFlowの仕組みを学ぶ
・CIFAR-10のデータセットを利用したCNNの入門コース

以下省略

参考サイト「TensorFlowで始める深層学習 (1)そもそも何が出来るの?

 



この『Tensorflowで学ぶディープラーニング入門』の主な趣旨は、MNISTという画像セットを使ってTensorflowのコードを実装しながら、多層ニューラルネットワーク(CNN)の仕組みを理解しようというものです。
Tensorflowのチュートリアルでいえば1〜4の範囲までを網羅とまではいかなくても、学習したのと同じ効果が得られるでしょう。この書籍で学べるのは、主に学べるものは次のようになっています。



・Tensorflowのコードはどのような仕組みで使用するのか(1章)
・MNISTデータセットを使ったCNNの全体像の理解を通したテクニック(2〜5章)



今回は1章で学べることとして
機械学習の基本的な考え
・Tensorflowの役割

を淡々と書いていきます。学習記録なので、専門用語とか平気で使いますが、なるべくわかりやすく書いたつもりです。




Tensorflowの役割



機械学習では大きく分けて、
・教師ありアルゴリズム
・教師なしデータアルゴリズム

にわかれます。

『Tensorflowで学ぶディープラーニング入門』のチュートリアルでは、教師ありアルゴリズムであるディープラーニング(特にCNN)をコードを用いて、実際に実装することが目的です。



機械学習の根本的な考え方
機械学習ではあるデータの背後にある「数学的な構造」をコンピュータで見つけ出すことです。例えば、ある土地の平均気温のデータを予測してほしいと頼まれた場合、数年の気温データをもとにその先の気温を予測します。

f:id:trafalbad:20170320112621j:plain

例えばこんなデータが与えられたとしたら、このデータの背後にある数年先の気温を予測してくれるような「数学的な構造」を見つけ出すことです。数学的であるということは、ある程度の規則性をもっているということです。

数学的な構造を見つけ出すと言ってますが、これは一般的には物事を分類する問題(例:画像を分類する)と、予測する問題(例:株価の予想)に該当します。




そのためには以下の手順の作業をします(これは「最適化アルゴリズム」と呼ばれるものです)
①与えられたデータを元にして、未知のデータを予測する数式を立てる
②2乗誤差関数(損失関数)を求める
③勾配降下法を使って2乗誤差関数を最小にする

主な数式は割愛しますが、この3ステップのアルゴリズムを行うことで、データの背後にある「数学的な構造」を見つけ出すことが可能になります。



機械学習にはニューラルネットワークディープラーニング)がなぜ必要か
さっきは平均気温を求めるという予測問題を例に出しましたが、ニューラルネットワークの必要性を示すために分類問題を例に出します。

機械学習では「最適化アルゴリズム」でデータを分類、予測したりできます。しかし一般的にはこの問題はとても複雑なため、単純に最適化アルゴリズムの3ステップを行なっても対処できません。

例えば、下の図は癌にかかっている患者、かかっていない患者を分類してしたものです。

f:id:trafalbad:20170320112647j:plain
単純な分類問題とかなら下の図のように1本の線だけで済みます。しかし普通は3つ以上のものを分類しなければならないので、より複雑な線(関数)が必要になります。複雑になることは変数が増えるのですが、変数が増えて問題が複雑になると「最適化アルゴリズム」だけでは対処できなくなります。




そのためにニューラルネットワークという技術が必要になるのです。ニューラルネットワークでは複雑な問題に対処するために、その構造はより複雑さになります。


f:id:trafalbad:20170320112707j:plain
層内のノードを増やしたり、ノードの層を増やしたりする

そしてその構造が複雑になり、多層に渡るニューラルネットワークが構築されたものが多層ニューラルネットワーク(CNN)、つまりディープラーニングとなります。





Tensorflowは機械学習でどのような役割を果たすのか?
Tensorflowは「最適化アルゴリズム」やCNNを、実際にコンピュータで実装するためのコードをまとめたライブラリです。

Tensorflowのコードを用いれば、「最適化アルゴリズム」のステップで登場する、損失関数や勾配降下法をコードを使って実装できます。さらにCNNを実際にコンピュータでコードを使って実装することもできるわけです。

Tensorflowにはディープラーニングに必要な役割を持つ特別な関数が用意されているからです。つまり、Tensorflowを用いることでコンピュータを使って、ディープラーニングを構築することができるようになります。



Tensorflowの役割をざっとまとめました。本当はTensorflowのコードを使って「最適化アルゴリズム」の3ステップを実際に行い、気温を予測するところまで書くつもりでした。が、長すぎるので続きは次の記事で書いています。


f:id:trafalbad:20170320112810p:plain:w200
AmazonTensorFlowで学ぶディープラーニング入門 ~畳み込みニューラルネットワーク徹底解説~

AnacondaのjupyterでTensorFlow環境を構築する方法【Mac版】

機械学習

anacondaはディープラーニングを実装する上でかなり便利なツールだ。特にTensorflowなど特定のライブラリを使用するなら一番お手頃だろう。今回はディープラーニングのためにanaconda、その中に設置されているjupyterでTensorflowの使用環境を構築するやり方をまとめておきたい


PC、ツール環境
この記事ではMac版のPCを使うことを前提にしている。Macのバージョンと使用ツールは
Mac book air 10.12.3

Python 3.6

Anaconda 4.2.0

TensorFlow 0.12.0

MacはMacbookairを使用しており、これ以降のバージョンなら間違いなく使用できる。ツールはanacondaだけだ。jupyterはanacondaに付属しているので、あとはTensorflowをインストールするだけで環境は整う。



Anacondaのインストール
Anacondaはサイトから手順通りに従えば、すぐにインストールできる。インストール時間は20分くらい。


Tensorflowの環境設定
Anacondaの機能でTensorflow専用の仮想環境を作ることができる。anacondaではライブラリやPythonのバージョンなどを別々に管理して、専用の環境を作れる。

Anacondaがインストールできていれば、anaconda起動時の画面でAnaconda Navigatorがあるはずなので、それを起動する。

左のメニューの「Environments」を選択すると、仮想環境一覧が表示されるが、はじめは「root」という仮想環境のみが表示されている。


下側の「Create」をクリックすると仮想環境作成のメニューが表示されるので、わかりやすい名前を入れて作成(ここではtensorflowという名前にしました)そこでEnvironmentを選択。

f:id:trafalbad:20170310152357p:plain

右側に使用可能なライブラリが一覧で表示される。はじめは、numpyなどpython環境では必須のライブラリがないので、インストールをしておいた方がいい。



Tensorflowのインストール

ここからはTensorflowをインストールするので、Anaconda Navigator上で、先ほど作った「tensorflow」の横に三角のボタンが表示されている。そのメニューから「Open Terminal」を選択。

そこで以下のコマンドを入力すればTensorflowがインストールされる。

pip install tensorflow


"Successfully installed..."と表示されたら成功。

f:id:trafalbad:20170310152437j:plain

または「open termimal」が開けない場合は、Macにもとから備え付けられているtermimalで上のコマンドを入力すればOK
termimalはアプリケーションか→ユーティリティ→ターミナルで開ける。



jupyterでTensorflow環境を作る
仮想環境でTensorflowを作ったらanacondaに備え付けてあるjupyterで仮想環境を使用できるようにしてみる。

はじめはrootの環境でしかjupyterは使えない。そこで下の画面で、「Application
on」の部分をクリックし、Tensorflowを選択。

f:id:trafalbad:20170310152502p:plain

そうすると新しいTensorflow環境でのjupyterをインストールする画面が表示される。

そのjupyterをインストールすればanacondaのjupyterでTensorflowを使用できる環境は整った。



Tensorflowを試してみる
ここでTensorflowを実際に使えるか試してみよう。jupyterを起動し、右のNewから入力画面を表示。

f:id:trafalbad:20170310152629p:plain

そしたら以下のコマンドを入力してみる。

import tensorflow as tf

def x2_plus_b(x, b):
    _x = tf.constant(x)
    _b = tf.constant(b)
    result = tf.square(_x)
    result = tf.add(result, _b)
    return result
with tf.Session() as sess:
    result = sess.run([x2_plus_b(2., 3.)])
    print(result) 

下のような出力結果がでてくれば、Tensorflowが無事使える環境が整った。
f:id:trafalbad:20170310152555p:plain

今回はAnacondaのjupyterでTensorflowを使用する方法を紹介した。Windows版だと多少違うと思うが、Macならこれで使えるようになるばずだ。

courseraのMachine Learning(機械学習)の講義内容まとめ(6〜11講義の概要)

機械学習

前回に引き続き、courseraのMachine Learning(機械学習)コースの講義概要を書きます。

知識ゼロで見るとよくわからない内容ですが、機械学習が学ぼうとしてるなら何言ってるかおおまかにわかるはず。これから機械学習を学んでみようと思うのでcourseraのMachine Learning(機械学習)コースを受講しようという人には役立つと思います。

また自分はディープラーニングを学びたくてこの講義を受講したのですが、ディープラーニングを学びたい場合どのような勉強法をやればいいのかは別記事にまとめる予定です。

あくまで備忘録ですが、1〜5講義の内容はこちら

目次
講義6.学習アルゴリズム診断
講義7.サポートベクターマシーン(SVM
講義8.クラスタリング(教師なしデータ)アルゴリズム
講義9.アノマリー検出
講義10.大規模スケールの機械学習
講義11.機械学習の応用テクニック


f:id:trafalbad:20170303115903j:plain

講義6.学習アルゴリズム診断



概要
学習アルゴリズムを効果的に改善する方法、上手く学習できてるか診断する方法、どうすれば学習アルゴリズムを効果的に実装できるかについて専門的なテクニックをいくつも紹介しています。


テクニックも使えますが、「扱う変数となるフィーチャー(特徴)が多い場合はトレーニングセットとテストセットに分けるべき」など、より実践的なアドバイス機械学習エンジニアには参考になります。



出てくる式やテクニック

機械学習診断:データセットが多い場合、そのデータセットをトレーニングセット、クロスオーバーセット、テストセットに分けるという内容。

高バイアスと高分散問題:学習アルゴリズムが上手くいってないときの典型的な問題とその解決策を提示


機械学習のデザイン戦略:学習アルゴリズムを設計するときの効果的な戦略を紹介。

・〜%などその学習アルゴリズムの良し悪しを判断する単一の評価指数があると便利(Fスコアなど)
・まず初心者がやるべきことは、データを集めて汚くてもいいので動くアルゴリズムを実装すること。それからアルゴリズムを改善すればいい
アルゴリズムで解くべき問題に対して「その分野の専門家に聞いても答えられる問題どうか」を考えて、答えられないようならばデータがもっと必要



講義7.サポートベクターマシーン(SVM



概要
ロジスティック回帰以外に、より複雑な非線形の関数を扱うよりパワフルな手法として、サポートベクターマシーン(SVM)を紹介。

SVMはロジスティック回帰とは違うテクニックなため、カーネルという手法と一緒に使います。よりアドバンスドな(進んだ)非線形問題のためのテクニックです。


出てくる式やテクニック

SVMSVMの手法はグラフにプロットしたとき、与えられたデータからの距離が最も大きくなるような直線を引く関数を求めます。

カーネル:データセットから得た目印(ランドマーク)とフィーチャーをグラフ上に視覚化したとき、その2つの距離が近れければ近いほど、2つの類似度が高いことを表す関数。

SVMカーネルと一緒に用いることが多く、かなり発展的な内容です。数式ばっかりで頭が痛くなります。



講義8.クラスタリング(教師なしデータ)アルゴリズム



概要
今までは教師ありデータアルゴリズム(テストセットのデータが与えられている)分類問題だった。

しかし、講義8からは教師なしデータアルゴリズム(テストセットのデータが与えられていない:例Googleニュースでは機械がたくさんのニュースを自動でカテゴリ別に分類)分類問題を扱う。教師なしデータアルゴリズムがすることはクラスタリングと抽出です。その上でのテクニックを紹介



出てくる式やテクニック
K-means:与えられたデータセットをグラフ上に可視化し、その可視化した点を2つ、もしくはそれ以上に分類するテクニック(重心を決めて、データセットの平均から重心が収束する点を求め、分類する)。

K-meansのコスト関数や初期化の方法も紹介。



次元削減機械学習は特徴を表す変数(フィーチャー)により次元が異なるが、次元が多いほどアルゴリズムの学習スピードは遅くなる。そのため次元を減らす(2次元を1次元とか、50次元を2次元に減らす)テクニックを紹介。
次元削減で主に使われるのは主成分分析(PCA)。またPCAの次元を元に戻すテクニックもある。



講義9.アノマリー検出



概要
アノマリー検出はフィーチャーを持つデータセットに対して、「それがテストセットになるか」または、「普通ではない(異常な)フィーチャーか」を学習アルゴリズムに確率として教えることができる(例えば、ネット上のユーザー情報の中で異常なユーザーの行動を特定する)。


フィーチャーを持つ未知のデータセットに対して、それをテストセットとして扱えるかを分類します。扱うデータのフィーチャー(特徴)が

・データセットと似たものである→教師あり学習アルゴリズムを使う
・逆にまったく見たこともない→アノマリー検出で対応する

出てくる式やテクニック

ガウス分布アノマリー検出に使うグラフのテクニック


アノマリー検出のフィーチャーのデザイン方法アノマリー検出で見つかった異常なフィーチャーから、さらに新しいフィーチャーをデザイン(設計)する方法。


レコメンダーシステム、協調フィルタリング、多変量ガウス分布アノマリー検出をより拡張したときに使うテクニック。



講義10.大規模スケールの機械学習



概要
今まではデータのフィーチャーが1万個くらいのデータセットの問題(バッチサイズ)を扱っていました。ここでは1億レベルのフィーチャー(大規模スケール)を扱う機械学習のテクニックを紹介しています。


主に扱うのは勾配降下法の大規模スケール版である確率的勾配降下法。また大規模スケールの問題をミニバッチサイズ(1000個ほどのフィーチャー)で対処するテクニックもあります。



出てくる式やテクニック
確率的勾配降下法:今までの勾配降下法はデータをすべて式で計算してやっと一回更新するため、大規模スケール(億レベル)だと膨大な時間がかかります。

しかし確率的勾配降下法はすべてのデータを一回式にかければ、最小値に収束します(最小値が見つかる)。



確率的勾配降下法の収束確認法と学習率の選択法確率的勾配降下法では最小値の付近を振動するような線を描くため、最小値に収束しているかを確認する方法。
および、確率的勾配降下法の計算式の学習率(α)の選び方


講義11.機械学習の応用テクニック



f:id:trafalbad:20170303115929j:plain

概要
写真内の文字を読み取るPhotoOCRと呼ばれる技術を例にとり、機械学習を様々な分野に応用できるテクニックを紹介。

音声分析や画像分析にも使えるテクニックや、エンジニアとして効率的に機械学習を進めるテクニックを説明しています。

機械学習で無駄なことはせっかく集めたデータが使えないとわかり、データ集めに費やした時間が無駄になることです。その時間ロスを減らすには大量のデータを収集する前に、大量のデータがそもそもアルゴリズムで活用できるかじっくり考えること。


出てくる式やテクニック
PhotoOCR:紙媒体の文字を読み取るOCRの高度なバージョンで、写真内の文字を読み取る技術。その中でもスライディングウィンドウ分類器は、車や歩行者の判別など様々な分野に応用されています。


人工データ合成:学習アルゴリズムの理想は「低バイアスで大量のデータセットを読み込める」こと。それを実現するテクニック。やり方は無からデータを作り出すか、少ないデータを増幅する。

シーリング(天井)分析機械学習を段階別に分けたステップを「パイプライン」と呼び、どのパイプラインに時間を費やすか調べる技術。機械学習で無駄を極限まで減らすテクニック。



今回はcourseraの機械学習コースの講義6〜11までをまとめました。内容的には機械学習にさわろうという人なら、何を学べるかわかるので参考になる内容ではないでしょうか。

とにかくcourseraは機械学習の全体像を把握するのに一番手っ取り早いでしょう。ここまでまとまってる知識は書籍ではまずないし、おそらくcourseraでしかここまで体系立てて学べないはずです。機械学習のとっかかりにはベストの講義だと思います。無料ですし。

後になってわかったのですが、ディープラーニング機械学習分野の一部でしかありません。

ディープラーニングやcourseraの効率的な学習方法は別記事にてまとめようと思います。

1〜5講義までの内容はこちらの記事をどうぞ。
trafalbad.hatenadiary.jp

courseraのMachine Learning(機械学習)の講義内容まとめ(1〜5講義の概要)

機械学習

将来的にプログラミングを学ぶ必要がでてきた(主にディープラーニング)ので、courseraのMachine Learning(機械学習)コースを受講しました。
講義内容としては機械学習の基礎を広く理解するためのもので、機械学習でどのような手法が使われているかを紹介しています。機械学習の全体像がわからないという人にはまさにうってつけの講座と言われているこのcourseraの機械学習コース。個人的備忘録ですが、その講義全11講義の概要をまとめておこうと思います。

この記事では1〜5講義までの概要をまとめてあります。
6〜11講義はこちら

✳︎2017年2月時点では、日本語字幕があり、英語が聞きとれなくても学べる環境にあります。

目次
講義1.機械学習の概要
講義2.より複雑な(非線形な)機械学習の概要
講義3.分類問題とロジスティック回帰
講義4.ニューラルネットワーク
講義5.ニューラルネットワークのテクニック

f:id:trafalbad:20170302192742j:plain



講義1.機械学習の概要



概要
講義1では機械学習の全体像を説明しています。
機械学習は普通の複雑な関数からなる問題ですが、それを1次元の関数問題である線形回帰で簡潔に説明。

機械学習は教師ありデータアルゴリズム、教師なしデータアルゴリズムの2つに分類され、ディープラーニングは教師ありデータアルゴリズムに属します。

連続的なデータから数値を予測する「回帰問題」と離散的なデータを特定のカテゴリに分ける「分類問題」に分かれていること。
さらに、最も単純な線形回帰を使ってデータセットからどのような方程式を解いて回帰問題や分類問題を実行するかを説明します。



出てくる式やテクニック
目的関数(コスト関数):2乗誤差関数とも呼ばれ、機械学習では全体のキーとなる関数。 機械学習ではコスト関数を探し、勾配降下法などのアルゴリズムを使って最小化するやり方が一般的になります。

勾配降下法:コスト関数の最適な最小値を求めるためにコスト関数の変数を更新するテクニック。ディープラーニングでも出てきます。




講義2.より複雑な(非線形な)機械学習の概要



概要
講義1では1次元(線形)の機械学習問題だったため変数が1つだけでした。しかし、講義2では変数を2つ以上に増やして、より機械学習らしい問題の概要を具体例を交えて説明しています。

コスト関数は同じですが、変数が増えているのでそれに合わせた行列表記法。および非線形のときに使う勾配降下法のテクニックを中心に紹介&説明


出てくる式やテクニック
勾配降下法をより早く機能させるテクニック非線形になると勾配降下法が遅くなるので、それを早くするテクニック

勾配降下法がうまくいってるか確認する方法:主に「グラフにプロットとして視覚化しましょう」という内容

正規方程式:勾配降下法は何回も変数の値を更新する必要があるが、「正規方程式」を使えば一回の更新で済む。ただし変数の数が少ない場合はのみ(1000個ほど)



講義3.分類問題とロジスティック回帰



概要
非線形のつまり、変数が2つ以上の複雑な関数の分類問題で、その値を確率で表すのが「ロジスティック回帰」のアルゴリズムです。

ロジスティック回帰の分類問題ではシグモイド関数により確率問題として扱うため、シグモイド関数に合わせたコスト関数、勾配降下法を説明。

またデータがトレーニングデータに慣れすぎてしまい、汎用的な能力がつかなくなる「オーバーフィッティング」を防止するための”正規化”についても説明しています。



出てくる式やテクニック
ロジスティック回帰ディープラーニングでおなじみのシグモイド関数を使って、ロジスティック回帰のコスト関数やその仕組みを説明

one vs all法:変数が2つ以上のとき、ロジスティック回帰における分類問題のやり方を説明

正規化:「オーバーフィッティング」を防止するために値がゼロに近づくようにするテクニック。コスト関数、勾配降下法、正規方程式を正規化する方法を紹介




講義4.ニューラルネットワーク



f:id:trafalbad:20170302192833j:plain



概要

ディープラーニングでお馴染みのニューラルネットワーク。これは機械学習では非線形の複雑な関数ではよく用いられる手法であり、それを解説。

ディープラーニングでの使い方というより、ニューラルネットワーク機械学習での使い方や、位置づけを解説しています。

ニューラルネットワーク機械学習が複雑なコードを書くものにより成り立つのではなく、人間の脳の機能を真似したものであることがよくわかります。

大体の表記や仕組みはロジスティック回帰のような確率問題に帰着しますが、ニューラルネットワークがロジスティック回帰と違う点は、ロジスティック回帰が変数にフィーチャー(特徴)を使うのに対し、ニューラルネットワークは隠れ層を使い、変数を次の層に伝播する構造を持っていること。


出てくる式やテクニック
重み・バイアスニューラルネットワークでは計算式に使われる概念で、学ぶ上では欠かさない知識。

XORゲート非線形問題をニューラルネットワークで処理するためのテクニック。ロジスティック回帰における「one vs all法」のように、3つ以上の分類問題を2つの分類する問題として扱う(例:y={1,2,3,4}に対する出力結果の表記法は{1,0,0,0,}、{0,1,0,0,}、{0,0,1,0}、{0,0,0,1}となる)。





講義5.ニューラルネットワークのテクニック


f:id:trafalbad:20170302192950j:plain


概要

ニューラルネットワークでのコスト関数や逆伝播法といった今までやってきた講義内容のニューラルネットワーク版を説明。

メインテクニックはニューラルネットワークのコスト関数および誤差逆伝播法です。


出てくる式やテクニック
ニューラルネットワークのコスト関数ニューラルネットワークはロジスティック回帰問題と同じ確率問題に帰着するため、ロジスティック回帰のコスト関数と大体同じです。

しかし、今まで紹介したコスト関数よりも形がより複雑になってます。



誤差逆伝播:これは説明が長くなってしまうので割愛しますが、主な役割はコスト関数の偏微分を求めるときに使うテクニック。ディープラーニングでは必須のテクニックです。





主な講義の概要を書くとこんな感じでしょうか。機械学習に馴染んでないと訳のわからない用語だらけですが、courseraの機械学習コースでは知識ゼロでもわかるようになってます。

そもそもこの講義は機械学習の使い方を学ぶというよりは全体像をおさえて、機械学習ではどんなことをやっているのかを知ることができます。機械学習の基礎から、シリコンバレーの最先端企業が使っているテクニックまで網羅している分、重いです。しかし機械学習の知識をてっとり早く身につけるにはかなり評価の高い講義なので、そこらのオンライン講座よりはるかにマシです。

自分は課題とかはやらずに講義の内容をひたすらノートにメモってやりました。その備忘録なわけですが少しはこれから受講する人には役立つ内容ではないでしょうか。

講義6〜11はこちらの記事で紹介しています。
trafalbad.hatenadiary.jp

パソコンによる目の疲れを回復させるオススメの11の方法【視力ケア】

ノウハウ・テクニック

仕事や勉強などでパソコン作業は必須になった。夜になってもスマホをいじる習慣もなかなか抜けない。そのまま目を酷使し続けると目の負担は尋常じゃなくなる、何か目の負担をとる方法はないだろうか?今回は毎日パソコンやスマホを使いながらでも、目の負担を軽くする方法を紹介しようと思う。

目次
・パソコンをつける前の環境作り
・パソコン操作中の視力ケア
・アフターケア

f:id:trafalbad:20170123070523j:plain


パソコンをつける前の環境作り



照明をつけて明るい環境を作る

パソコンをいじるなら、部屋を明るくする環境作りには必須だ。例えば、曇りの日だと部屋はかなり暗くなり、画面を見るのに目の負担が大きくなる。

部屋の隅や、奥の方にパソコンがあるなら、部屋の照明やスタンドライトくらいはつけよう。また日の当たるところでも直射日光は避けた方がいい。直射日光は画面の光を乱反射させて、よけいパソコン画面を見辛くしてしまう。

パソコンを置くなら、窓辺の日陰とかがベストコンディションではないだろうか。




パソコン画面のズームアップ

パソコンのほとんどは文字媒体のはず。Googleやwordもそうだし、仕事では文章がほとんどだろう。そうした時は画面を必ずズームアップしよう。

パソコンのOSによって操作方法も異なるが、そのときはGoogleに聞けばいい。文字を大きくするのは、年寄りのやることだと思われがちだが、目の普段を軽くする上ではバカにできない。




ブルーライトカットのPCメガネを使う

ブルーライトはPCやスマホから発せられる目に害のある光だ。PCメガネはそれをカットすることで有名。

f:id:trafalbad:20170123070607j:plain

ネット上では賛否両論だが、実際に使っている経験から言わせてもらうと、効果は抜群だ。

買う前はPC作業15分で目が痛くなってきたが、PCメガネでは1時間は持つ。定期的に休憩を入れれば一日フル稼働でPC、スマホの相手ができるほどの優れものだ。

値段はフレーム込みで5000円〜1万円程度。実際にメガネに行って、度とサイズが合うものを購入した方がいいだろう。PCメガネ有る無しでは目の普段が驚くほど減る。



f:id:trafalbad:20170123071940j:plain




パソコン操作中の視力ケア




まばたきを1秒に一回する

人間は普通は2秒に一回はまばたきをする。しかしパソコン画面とかを見てるときは、0.5秒〜1秒単位でまばたきを意識的にしよう。

理由はいくつかあるが、目の渇きを抑えることと、パソコンを凝視することを抑える効果がある。まばたきをしないと、パソコン画面をじっとにらみつけていることが多くなってしまい、結果的に目が疲れやすくなる。

まばたきを意識的にすることで目の負担は大分軽くなる。




30分に一回10分休憩する

パソコンやスマホを30分いじったら10分休憩するのがベストらしい。
メガネ屋の定員曰く、休憩時間には
  • 目を閉じる
  • 遠くを見る

など、一般的に目を休める対策を取ればいいとのこと。具体的には30分〜1時間で10分が基準らしい。PCメガネをつけてたり、目に負担のかからない状況であれば、持続時間は伸びる傾向にあるようだ。

とはいえ最高でも1時間に1回は休憩したいもの。スマホの方が至近距離かつ、画面が小さいので持続時間は短くなるかも。




目薬をさす

メガネでもコンタクトでも目薬はどこでもさせるので、目への水分補給には最適。
ネットで人気のものを探したら

  • 1位ソフトサンティア
  • 2位ロートクール
  • 3位マイティアフレッシュ

*参考「NAVERまとめ

が最も人気があるようだ。ソフトサンティアはコンタクトのピントを合わせる成分が最大量入っているため、コンタクト用の目薬では一番だと思われます。

f:id:trafalbad:20170123070644j:plain:w250
Amazonソフトサンティア 5mL×4

目の疲労には水分が結構関係してるので、目薬はかなり効果的。ネットで買うのもりだけど、眼科に行くチャンスがあるなら、医者がすすめるものを使って見るのもありですね。





アフターケア



ホットアイマスクをのせる

ホットアイマスクと言って、目の上に載せて目を温め、疲労をとるマスクが人気だ。Amazonではあずきのチカラが最も人気がある。
メリットは200回連続で使えるので、コスパがメッチャいい。使い方も電子レンジで温めるだけなので、すぐにできる。

f:id:trafalbad:20170123070659j:plain:w250
Amazonあずきのチカラ



デメリットは特にないが、強いて言うなら「載せた時のフィット感が無いこと」だろうか。軽量で水分が少ないので、お湯で湿らしたタオルほどのフィット感は望めないだろう。しかし効果のほどは保証できる。

ちなみに目にのせるて気持ちいい部分のランキングは

  • 1位 まぶたの上
  • 2位 目頭
  • 3位 眉毛の下と目の間


の順になっている。やはり「まぶたの上に載せると目が回復した」という意見が70%を超えている。前述したように、最近ではホットアイマスクが手頃に手に入り、メッチャコスパがいいのでぜひ活用したい。




3D視力回復アプリを使う

3D視力回復

3D視力回復

  • koikoi.biz
  • ヘルスケア/フィットネス
  • ¥120

視力回復アプリは結構でているが、一番レビューが高く効果があると絶賛されているのが「3D視力回復」だ。
これは3Dステレオグラムという、ぱっと見では立体に見えない画像を立体が見えるように視力を矯正する。

それで普段使わない脳の筋力を活用させ、視力を矯正させる。使用頻度は毎日、一日2、3回使うことだ。自分は試して1ヶ月になるが、朝起きた時に確かに視力が回復してる感はある。

レビューがとても高く、科学的にも合理性がありそうなので効果の程は間違いないだろう。視力のアフターケアとしてオススメできる。




視力回復効果を持つブルーベリーをとる

視力回復効果を持つ食品はいろいろあるが、一番身近なのはブルーベリーだ。

ブルーベリーに含まれるアントシアニンという成分が、目の網膜のロドブシンの再合成を活発化させる。つまりブルーベリーには目の疲れを回復させる、体の機能を促進させる効果がある。

ジャムやヨーグルトでとると、パンと一緒に食べられるし、ヨーグルトだとデザートにもオススメ。

Amazonで人気なのはブルーベリーエキスというのがあった。30日分や90日分などがあり、面倒くさくても毎日とれる。個人的にはこちらの方がオススメだ。

f:id:trafalbad:20170123070719j:plain:w250
AmazonDHC ブルーベリーエキス




睡眠をタップリとる

人間は体の性質上、日中に最も活動できるようになっており、夜になるとその能力が弱くなる。目も同じ働きがある。例えば、夜中まで明るい照明を浴びたり、液晶画面を見たりしていると、眼精疲労の悪化になる。つまり夜更かしや、睡眠不足は目に悪いのだ。


眼精疲労を和らげるためには、しっかりとした睡眠をとることが何よりも大事だ。生活リズムがしっかりすると人間の性質上、目もぱっちり開くようになっている。


この人間の活動の元となるのは”自律神経質”と呼ばれるが、この自律神経バランスを整えることは目の疲労をためない大事な要因だ。目の疲労をためない、回復力を高めるには自律神経のバランスをとるために十分な睡眠をとろう。


目の体操で視力回復

news.kirei-navi.com

この方法で実際に視力が0.5から1.5まで回復する。はてなブックマークにもエントリーされている記事。
簡単にまとめると目のトレーニング法は以下の通り
目を強くつぶり10秒上を見る

目を強くつぶり下・右・左と10秒繰り返す

指の先端を目で追う運動 (顔は動かさない)

自分で行う場合

∞の字を3回指で描き目で追う

指を奥から手前へ3回動かして目を追う

なにやらメジャーリーグでも行なっているらしく、その効果は毎日継続すると効果はあるかはわからない。けど視力が上がる様子は動画で確認できる。




今回はパソコン作業やスマホをいじるのが多くなってきたので、目のケア方法をまとめてみた。どれも実践すると効果的なものばかりなのでオススメです。