SlideShare a Scribd company logo
Pythonプログラミング
(人工知能/ディープラーニングのプログラミング)
越智 由浩
https://github.com/yoshihiroo/programming-workshop/tree/master/deep_learning_jupyter
1
今日のアジェンダ
• 今日の立ち位置、言葉の整理
• ディープラーニングの
• 計算のやり方
• 計算の道具
• ディープラーニングを用いた手書き文字(数字)認識の実例
2
今日のアジェンダ
• 今日の立ち位置、言葉の整理
• ディープラーニングの
• 計算のやり方
• 計算の道具
• ディープラーニングを用いた手書き文字(数字)認識の実例
3
今日の立ち位置 ~ 人工知能を学ぶ中で
4
社会・ビジネス視点
サイエンス・
テクノロジー視点
コトバノチガイ
ディープラーニングで何が
できるのか、世の中がどう
変わるのか
ディープラーニングっ
てそもそも中身は何を
やっているのか
今日はこちら
側の基礎的な
ところ
両方の目を持とう!
今日の内容のベースとなる本
• 内容、ソースコード、図など、
こちらの本から引用しており
ます
• Amazonでディープラーニン
グで検索するとベストセラー
本として簡単に見つかります
• 復習兼ねてぜひご購読をお勧
めします
5
3時間後の皆さんの状態(期待値)
• さらに学ぼうとして、その手の本とかwebコンテンツを見たと
きに「あぁぁあぁ、なんとなく見たことあるぞ」という親近感
を得られる
• Jupyterを触れるようになる—ディープラーニングを動かせる/
試せる環境を手に入れることができる
6
まず、言葉の整理
人工知能
「お、こいつ賢いな!」と思わせるもの、ふるまい。
またそれを探求する学問領域。
7
まず、言葉の整理
人工知能
機械学習
人工知能を実現する一つの手段。
過去のデータ(知見/経験)に基づいて:
・将来を予測する
・未知のものを分類する
例)
eコマースサイトのリコメンド
迷惑メールの自動振り分け
8
まず、言葉の整理
人工知能
機械学習
ディープラーニング
多階層(ディープな)ニューラルネット
ワークを用いた機械学習(ラーニング)
9
今日のアジェンダ
• 今日の立ち位置、言葉の整理
• ディープラーニングの
• 計算のやり方
• 計算の道具
• ディープラーニングを用いた手書き文字(数字)認識の実例
10
ニューラルネットワークモデルの計算
ルール
1.0
0.5
+0.3
0.1
0.2
入力元の
信号の強さ
重み(信号の伝わりやすさ)
発火のし易さ(バイアス)
活性化関数
(いくつか種類がある)
11
次のノードへ
「関数」ってなに?
12
入力 出力
𝑦 = 𝑓 𝑥
𝑦𝑥
ニューラルネットワークモデルの計算
ルール
1.0
0.5
+0.3
0.1
0.2
入力元の
信号の強さ
重み(信号の伝わりやすさ)
発火のし易さ(バイアス)
活性化関数
(いくつか種類がある)
13
次のノードへ
活性化関数
出力
ステップ関数 シグモイド関数
ReLU関数
(Rectified Linear Unit)
14
入力の総和+バイアス
手触り感持って理解するために、さほど
ディープじゃないニューラルネットワークモ
デルを使って手計算してみよう
15
1.0
0.5
+0.1
+0.2
+0.1
+0.2
+0.1
+0.2
+0.3
0.1
0.3
0.5
0.2
0.4
0.6
0.1
0.4
0.2
0.5
0.3
0.6
0.1
0.3
0.2
0.4
Input Output
シグモイド関数
16
シグモイド関数、参照シート
x y
0.3 0.574
0.516 0.626
0.7 0.668
1.1 0.750
1.214 0.771x
y
1.0
0.5
+0.1
+0.2
+0.1
+0.2
+0.1
+0.2
+0.3
0.1
0.3
0.5
0.2
0.4
0.6
0.1
0.4
0.2
0.5
0.3
0.6
0.1
0.3
0.2
0.4
手計算結果
sig(0.1+0.1+0.1)=0.574
sig(0.3+0.2+0.2)=0.668
sig(0.5+0.3+0.3)=0.750
sig(0.0574+0.134+0.225+0.1)=0.626
sig(0.230+0.334+0.450+0.2)=0.771
0.0626+0.154+0.1=0.317
0.188+0.308+0.2=0.696
Input Output
sig():シグモイド関数 17
784個
50個
100個
10個
18
784個
50個
100個
10個
入力
計算
(膨大な量の
掛け算と足し算
と活性化関数)
出力
このくらいの数のニューラルネットワークを使うと、
手書きの文字認識ができちゃいます。
19
計算
(膨大な量の
掛け算と足し算
と活性化関数)
単調な計算の繰り返しは
コンピューターの得意技。
プログラムを作って計算
させちゃえばいい!
20
今日のアジェンダ
• 今日の立ち位置、言葉の整理
• ディープラーニングの
• 計算のやり方
• 計算の道具
• ディープラーニングを用いた手書き文字(数字)認識の実例
21
ふたつの道具を手に入れよう
•数学の道具 – 行列の計算
•プログラミング – Python
(なぜPythonかは後ほど補足)
22
数学の便利な道具 – 行列、内積
3 x 2の行列の例 行列の内積の例
23
なぜ便利かは後ほどわかる
行列計算に慣れ親しむ
・
1 3
5 7
9 11
11
22
=
・
1 3
5 7
9 11
=
?
77
209
341
?
24
11 22
25
蛇足
いろいろな呼び方
• 行列 = マトリックス = 二次元配列 = 二次元行列
数学っぽい 英語 プログラムのときよく使う 次元を明示的に
• ベクトル = 配列 = リスト
数学っぽい プログラム‥ 特にPython
表記方法
• 行列は大文字 A, B, C..
• ベクトルは小文字 a, b, c..
26
いよいよPythonプログラミングです
27
Jupyterというブラウザベースの開発
環境を使います。
+
で、セル内のコマンド(プログラム)
を実行します。
32
なぜ、行列(内積)なんていう道具を使うのか?
それは、行列を使うとニューラルネットワークを
シンプルに記述できるから。
ニューラルネットワークを行列計算で表
現してみる
1.0
0.5
+0.1
+0.2
+0.1
+0.2
+0.1
+0.2
+0.3
0.1
0.3
0.5
0.2
0.4
0.6
0.1
0.4
0.2
0.5
0.3
0.6
0.1
0.3
0.2
0.4
Input Output
先ほどの模型の前半部分
入力
x
重み
W バイアス
b
出力
z とすると、
z = sig( W ・ x + b )
+
sig() …シグモイド関数
= sig( )
= sig( )
= sig( ) =
・
+
0.1 0.2
0.3 0.4
0.5 0.6
1.0
0.5
0.1
0.2
0.3
0.1
0.2
0.3
0.2
0.5
0.8
0.3
0.7
1.1
0.574
0.668
0.750 33
ニューラルネットワークを行列計算で表
現してみる
1.0
0.5
+0.1
+0.2
+0.1
+0.2
+0.1
+0.2
+0.3
0.1
0.3
0.5
0.2
0.4
0.6
0.1
0.4
0.2
0.5
0.3
0.6
0.1
0.3
0.2
0.4
Input Output
先ほどの模型の前半部分
入力
x
重み
W バイアス
b
出力
z とすると、
z = sig( W ・ x + b )
+
sig() …シグモイド関数
= sig( )
= sig( )
= sig( ) =
・
+
0.1 0.2
0.3 0.4
0.5 0.6
1.0
0.5
0.1
0.2
0.3
0.1
0.2
0.3
0.2
0.5
0.8
0.3
0.7
1.1
0.574
0.668
0.750
こいつをPythonで実装してみよう!
34
1.0
0.5
+0.1
+0.2
+0.1
+0.2
+0.1
+0.2
+0.3
0.1
0.3
0.5
0.2
0.4
0.6
0.1
0.4
0.2
0.5
0.3
0.6
0.1
0.3
0.2
0.4
x W1 W2
先ほどのニューラルネットの例
b1 b2 W3 b3
z1=sig(W1・x+b1)
z2=sig(W2・z1+b2)
z3=W3・z2+b3
z1 z2 z3
sig() …シグモイド関数
0.1 0.2 0.3
0.4 0.5 0.6
0.1 0.2
0.3 0.4
0.5 0.6
0.1 0.2
0.3 0.4
1.0
0.5
0.1
0.2
0.3
?
?
?
?
?
?
?
0.1
0.2
0.1
0.2
Jupyterを使う
import numpy as np
def sig(x):
return 1 / (1 + np.exp(-x))
W1 = np.array([[0.1,0.2], [0.3,0.4], [0.5,0.6]])
x = np.array([1.0, 0.5])
b1 = np.array([0.1, 0.2, 0.3])
z1 = sig( np.dot(W1, x) + b1 )
W2 = np.array([[0.1,0.2,0.3], [0.4,0.5,0.6]])
b2 = np.array([0.1, 0.2])
z2 = sig( np.dot(W2, z1) + b2 )
W3 = np.array([[0.1,0.2], [0.3,0.4]])
b3 = np.array([0.1, 0.2])
z3 = np.dot(W3, z2) + b3
print(z3)
コンピューターにニューラルネットワーク
の演算をさせる方法を手に入れた!
37
Jupyterを使う
38
だったらこいつもいけるんじゃね?
1
0
2
3
5
4
6
7
9
8
W1 W2 W3
x
b1
b2
b3
z1=sig(W1・x+b1)
z2=sig(W2・z1+b2)
z3=W3・z2+b3
z1
z2
z3
50x784 100x50 10x100
先ほどやったやつ
層やノードの数が増えても、行列を使うとシンプルに表現できる!
そしてPythonプログラムで記述できる。
今日のアジェンダ
• 今日の立ち位置、言葉の整理
• ディープラーニングの
• 計算のやり方
• 計算の道具
• ディープラーニングを用いた手書き文字(数字)認識の実例
39
手書き文字(数字)認識をさせてみる
手書き文字
認識
ディープ
ラーニング
?
一体どう結びつくのか?
人間が文字認識する、をホワイトボードでやってみる40
ディープラーニングの全体の流れ
41
データの準備
学習
検証/適用
MNIST手書き文字データ
http://yann.lecun.com/exdb/mnist/
• 6万文字分の学習用データ
• 1万文字分の検証用データ
6万文字分の学習用データを使って、入
力した手書き文字に対応した出力が得
られるようにパラメータW1, W2, W3,
b1, b2, b3 を調整
1
0
2
3
5
4
6
7
9
8
W1 W2 W3
x
b1
b2
b3
z1
z2
z3
50x784 100x50 10x100
入
力
出
力
1
0
2
3
5
4
6
7
9
8
W1 W2 W3
x
b1
b2
b3
z1
z2
z3
50x784 100x50 10x100
入
力
出
力
学習済(うまくパラメータが調整された
状態)のニューラルネットに検証用デー
タを入力し、うまく認識されることを
検証する
5
7
9
これは
「5」です
これは
「7」です
これは
「9」です
ディープラーニングにおける学習とは
28
28
28x28=784個の格子(ピクセル)
ごとに0~1の255段階の値で明
るさを示すことで手書き文字を
表現
1
0
2
3
5
4
6
7
9
8
W1 W2 W3
x
b1
b2
b3
z1
z2
z3
50x784 100x50 10x100
入力 出力
-2.2
4.9
-1.3
-1.1
4.1
2.7
7.6
-3.2
3.1
5.3
パラメータ(W1, W2, W3,
b1, b2, b3 –全部で
45,350個の数字)を少し
ずつ変えながら、入力に
対応した箇所が大きな数
値を示すような絶妙な組
み合わせを探すプロセス
手書き文字を数値化し、 ニューラルネットに食わせ‥
42
具体的にどうアプローチするか—指標の定義
43
目指す姿
現状
ギャップを示す指標(損失関数)を定義する
学習の途中段階
この損失関数が最小
となるパラメータW1,
W2, W3, b1, b2, b3 の
組み合わせを探す
完璧に数字を判別できる状態
損失関数~当たってなさ具合の指標
44
学習用
データ
MNIST計6万枚のデータ群から、
ランダムに100枚を選び出す。
1
0
2
3
5
4
6
7
9
8
W1 W2 W3
x
b1
b2
b3
z1
z2
z3
50x784 100x50 10x100
5
00
7
1
9
3
一枚ずつニューラルネットに放り込んで計算
6
100枚
y=-log(x)
100枚分計算して平均を求める。
これが損失関数の値となる。
正解箇所の値
のエントロピー
-logを計算出力を正規化
(出力総和=1)
パラメータW1, W2, W3, b1, b2, b3
のある組み合わせ(学習の途中段階)
における当たってなさ具合
(補足)指数関数を用いた正規化
45
正規化の様子を数直線で表現すると、
大小さまざまな数字について、それぞれの
位置関係は保ったままで、
• 0から1のあいだにギュッと押し込む
• 且つ、値の総和が1になる
-1.2 0.301194 0.037784 4%
-0.3 0.740818 0.092934 9%
1.3 3.669297 0.460304 46%
0.1 1.105171 0.138641 14%
-1.1 0.332871 0.041758 4%
0.6 1.822119 0.22858 23%
7.97147 100%
Excelシートで実際に試してみた例
適当な数字
=EXP(左セル)
=SUM(列の合計)
=(左セル)÷SUMの値
左セルを%表示
列のSUM
確かに足したら1
0
0 1
+∞-∞
損失関数が最小となるパラメータを探す
46
損失関数E
当たってなさ
具合の指標
パラメータ
W1, W2, W3, b1, b2,
b3
足元の坂の傾きを調べて、
その傾きの大きさに従って一歩進む。
それを繰り返して、Eの一番低いところに
たどり着く
𝑊 ← 𝑊 − 𝛼
𝜕𝐸
𝜕𝑊
𝑏 ← 𝑏 − 𝛼
𝜕𝐸
𝜕𝑏
代入
代入
実際の学習の過程を見てみる
47
ディープラーニングの学習 ~ 奥深い世界
• 学習をいかに効率よく行うかが、実際にディープラー
ニングを使う上で大きな課題
• 学習(コンピューターの数値計算)の手法はそれ自体が奥
深い研究テーマであり、誤差逆伝搬法(バックプロパ
ゲーション)、SGD、Momentum、AdaGrad、Adam、
…など、専門用語がバンバン出てくる領域。今日はそ
のあたりの深入りはやめときます
48
学習済のパラメータを使って、文字認識
が正しく行われていることを確かめる
49
1
0
2
3
5
4
6
7
9
8
W1 W2 W3
x
b1
b2
b3
z1
z2
z3
50x784 100x50 10x100
「6」と認識できるか?
実際にPythonで動かして
試してみよう!
検証用のデータ
(ちょいと脱線)
ディープラーニングでなぜPythonなのか?
キラーアプリとしてNumPyの存在が大きい
Python(プログラム言語)
NumPyライブラリ
Pythonにはディープラーニングのみなら
ず、科学技術分野に有用なライブラリが
豊富。
その土台を支えるのが、行列に関する演
算を高速に・手軽に行うためのNumPyラ
イブラリ。
便利なコマンド・関数をパッケージにして、
広く他の人にも使えるようにしたもの
50
SciPyライブラリ
SciKitライブラリ ○○ライブラリ
Keras
Tensorflow
パラメータとハイパーパラメータ
51
パラメータ
W1, W2, W3, b1, b2, b3
(全部で45,350個の数字)
計算で求める
ハイパーパラメータ
• 何層にするか
• 各層のノードの数
• 活性化関数の種類
• …
人による設計
何度も計算させながら試
行錯誤を繰り返す
より高いコン
ピュータの計算能
力が求められる
ハイパーパラメータ探求を体感
52
パラメータの更新手法の数々
53
SDG
Momentum
AdaGrad
Adam
ゼロから作るDeep Learning 6章より図を抜粋
さらに精度を上げる
~畳み込みニューラルネットワーク~
54
アニメーションでざっくりとしたイメージを理解する
http://cs231n.github.io/convolutional-networks/
6
28
28
30
24
24
Filter 5x5 x30枚
+
Bias
30
ReLU
Convolutional ReLU
30
12
12
24
24
Pooling
…
Affine/
ReLU
…
Affine/
Softmax
100
10
評価に用いる畳み込みニューラルネット
ワークの構成
Jupyterを使う
話題の企業 – エヌビディア社
行列計算を超高速に並列処理できるチップを開発。それを組み込
んだ各種ハードウェアと、それらを活用するためのソフトウェア
群を提供。
CADやCG、ゲームなどの3Dグラフィックス領域から、ディープ
ラーニングへ適応領域を拡大。いずれも膨大な行列計算を必要と
するアプリケーション領域。
56
“謎のAI半導体メーカー”
まだまだ先は深いけど
• 今日の話の続きとして、畳み込みニュー
ラルネットワークのさらなる発展、効率
よく学習させるための様々なテクニック
など、学ぶべきテーマはまだまだありま
す
• しかし、その基本となるのは今日学んだ
ニューラルネットワークと、それを多層
構造化したモデルです
• これからニュースや記事でディープラー
ニングを見かけたときに、いままでより
も多少なりとも中身に親近感を持って理
解できる一助となれば幸いです
57
まだ潜り始めたばっかり

More Related Content

PDF
DS Exercise Course 3
PDF
機械学習ゴリゴリ派のための数学とPython
PDF
Enjoy handwritten digits recognition AI !!
PDF
「ゼロから作るDeep learning」の畳み込みニューラルネットワークのハードウェア化
PDF
Deep Learningの基礎と応用
PDF
これから始める人のためのディープラーニング基礎講座
PDF
PythonによるDeep Learningの実装
PPTX
「機械学習とは?」から始める Deep learning実践入門
DS Exercise Course 3
機械学習ゴリゴリ派のための数学とPython
Enjoy handwritten digits recognition AI !!
「ゼロから作るDeep learning」の畳み込みニューラルネットワークのハードウェア化
Deep Learningの基礎と応用
これから始める人のためのディープラーニング基礎講座
PythonによるDeep Learningの実装
「機械学習とは?」から始める Deep learning実践入門

Similar to ディープラーニングハンズオン・レクチャー資料 (20)

PDF
ハンズオン セッション 2: DIGITS による物体検出入門
PDF
深層学習レポート Day1 (小川成)
PDF
Deep learning実装の基礎と実践
PPT
Deep Learningの技術と未来
PDF
20160329.dnn講演
PPTX
ディープラーニングゼミ TensorFlowで学ぶ理論と実践
PDF
DIGITS による物体検出入門
PPTX
もう学習は機械に任せたい2 -ディープラーニングの逆襲-
PDF
エヌビディアが加速するディープラーニング~進化するニューラルネットワークとその開発方法について~
PDF
Chainerの使い方と自然言語処理への応用
PDF
Raspberry Pi Deep Learning Hand-on
PDF
2018年01月27日 Keras/TesorFlowによるディープラーニング事始め
PPTX
survey on math transformer 2023 0628 sato
PPTX
Pythonとdeep learningで手書き文字認識
PDF
Deep Learning技術の今
PDF
これから始める人の為のディープラーニング基礎講座
PDF
ハンズオン2: DIGITS による物体検出入門
PPTX
深層学習とTensorFlow入門
PDF
Deep Learning Lab: DIMo & Chainer
PPTX
MIRU2014 tutorial deeplearning
ハンズオン セッション 2: DIGITS による物体検出入門
深層学習レポート Day1 (小川成)
Deep learning実装の基礎と実践
Deep Learningの技術と未来
20160329.dnn講演
ディープラーニングゼミ TensorFlowで学ぶ理論と実践
DIGITS による物体検出入門
もう学習は機械に任せたい2 -ディープラーニングの逆襲-
エヌビディアが加速するディープラーニング~進化するニューラルネットワークとその開発方法について~
Chainerの使い方と自然言語処理への応用
Raspberry Pi Deep Learning Hand-on
2018年01月27日 Keras/TesorFlowによるディープラーニング事始め
survey on math transformer 2023 0628 sato
Pythonとdeep learningで手書き文字認識
Deep Learning技術の今
これから始める人の為のディープラーニング基礎講座
ハンズオン2: DIGITS による物体検出入門
深層学習とTensorFlow入門
Deep Learning Lab: DIMo & Chainer
MIRU2014 tutorial deeplearning
Ad

ディープラーニングハンズオン・レクチャー資料

Editor's Notes

  • #28: Elastic IP: 13.230.91.163 http://13.230.91.163:8888