人工知能エンジニア修行日記

主に機械学習、深層学習、Python、数学について覚え書きを記します

1章 数を扱う / まずは基本的な演算と数の種類を把握『Pythonからはじめる数学入門』

『Pythonからはじめる数学入門』をコツコツ通読&コマンドを打つ。 まずは、まずは基本的な演算と数の種類を把握。 数値処理に強いPythonっぽいメソッドもある。 9. 数値と数学モジュール — Python 3.6.1 ドキュメント 1章 数を扱う 1.1 基本数学演算 1.2 ラ…

データサイエンティスト(DS)になるためのスキルチェックシート

一般社団法人データサイエンティスト協会 という団体からデータサイエンティスト(以下DS)になるための目安となる スキルチェックシートが提供されている。 DSスキルチェック | Data Scientist Society Journal DSスキルチェック | Data Scientist Society Jo…

「新しい人工知能の教科書」は教科書ではなくカタログ

まずは先に人工知能の全体像を確認。 「新しい人工知能の教科書」を通読したが、この本は教科書というより知識のカタログ。 各知識の概要紹介と、参照資料をもとに、自分で深堀していく必要がある。 www.shoeisha.co.jp 【目次】 CHAPTER1 人工知能の過去と…

機械学習プロフェッショナルシリーズ一覧

機械学習プロフェッショナルシリーズというシリーズ本がある。 機械学習プロフェッショナルシリーズ | 書籍情報 | 株式会社 講談社サイエンティフィク 以下、既刊本。出版時期ごとに勝手にナンバリング。 1-1 機械学習のための確率と統計 978-4-06-152901-4 …

Deep Learning用語 日本語一覧

続いて、Deep Learning用語 日本語一覧。 こうして一覧にしてみると、うまく説明できない用語もあったり、スキップしたワンポイントコラム記事で言及されていた用語もあり、まだ復習が必要だ。 余談だが、最近は、だんだん人工知能視点になってきた。 「どこ…

Deep Learning用語一覧(英語)

『ゼロから作るDeep Learning』で深層学習を学び、自分自身の物理ニューラルネットワーク=脳を訓練中だが、一通り用語を一覧にした。 理論、実装、その他さまざまな用語が混ざっているが、これらを見ながら説明できない用語をピックアップして、本書を復習…

CS231n: Convolutional Neural Networks for Visual Recognition

『ゼロから作るDeep Learning』で何度も言及されていたスタンフォード大学の講義資料を参照する。 CS231n: Convolutional Neural Networks for Visual Recognition cs231n.github.io http://cs231n.stanford.edu/syllabus.html 英語は日常的に使っていないが…

8章 ディープラーニングDL『ゼロから作るDeep Learning』

本書の最後の8章は、現在のDLを俯瞰した説明なので、目次に合わせてメモ書き。 8章 ディープラーニング 8.1 ネットワークをより深く 8.1.1 よりディープなネットワークへ 8.1.2 さらに認識精度を高めるには これまで論文発表された手法の認識精度ランキング…

7章 畳み込みニューラルネットワークCNN 畳み込み層とプーリング層の実装『ゼロから作るDeep Learning』

↓ 7章 CNNの実装について。 畳み込み演算では、4次元データを処理する必要がある。 (batch_num, channel, hegiht, width) そこでフィルタにとって都合の良い入力データを展開する関数im2colを使用する def im2col(input_data, filter_h, filter_w, stride=…

畳み込み演算を図解するライブラリconv_arithmetic

7章のCNNで畳み込み演算を図解するツールを探していたら以下を見つけた。 github.com パディングやストライドの条件を指定できる。 texを使って記述するようだが、texはそれほど詳しくないので、必要に応じて調べておく。 文章や数式だけでは理解しづらい場…

7章 畳み込みニューラルネットワーク 畳み込み層Convolution layerとプーリング層Pooling layer『ゼロから作るDeep Learning』

さて、いよいよ畳み込みニューラルネットワークConvolution Neural Network, CNNまで来た。 最新の画像認識・音声認識でほぼ使われているCNNをじっくり理解していく。 CNNでは、今までのレイヤに、 畳み込み層Convolution layer プーリング層Pooling layer …

深層学習用の数学プログラミングは『Pythonからはじめる数学入門』より『行列プログラマー』かも

以下、手を動かしていないが、いったん通読完了。 www.oreilly.co.jp 目次 1章 数を扱う 1.1 基本数学演算 1.2 ラベル:名前に数を割り当てる 1.3 さまざまな種類の数 1.3.1 分数を扱う 1.3.2 複素数 1.4 ユーザ入力を受け取る 1.4.1 例外と不当入力の処理 1…

6章 学習に関するテクニック ハイパーパラメータ(hyper-parameter)の検証 『ゼロから作るDeep Learning』

6章 最後に、ハイパーパラメータ(hyper-parameter)の検証について。 ハイパーパラメータは人為的に試行錯誤しながら調整がするので検証が必要である。 しかし、汎化性能を評価するには、最終的に評価するための本番のテストデータが使えない。 そこで、ハイ…

6章 学習に関するテクニック 正則化, Weight decay, Dropout 『ゼロから作るDeep Learning』

続いて、正則化について。 過学習overfittingの起きる主な2つの原因 ・パラメータを大量に持ち、表現力の高いモデルであること ・訓練データが少ないこと 敢えて過学習させたケースをサンプルコードで確認する # cat overfit_weight_decay_pre_save.py # co…

6章 学習に関するテクニック Batch Normalization 『ゼロから作るDeep Learning』

6章 学習に関するテクニック『ゼロから作るDeep Learning』 続いて、Batch Normalization Batch Normalization(Batch Norm)とは:ミニバッチごとに正規化する手法。 メリット: 学習を速く進行させることができる 初期値にそれほど依存しない(初期値にロバ…

6章 学習に関するテクニック 推奨される重み初期値 『ゼロから作るDeep Learning』

6章 学習に関するテクニック 『ゼロから作るDeep Learning』 続き。 重みの初期値について。 結論として、重みの初期値をゼロにするのはNG。 重みの対照的な構造を崩し、ランダムな初期値を設定する。 勾配消失gradient vanishing:逆伝播での勾配の値が徐…

6章 学習に関するテクニック SGDとMomentum, AdaGrad, Adam 『ゼロから作るDeep Learning』

6章 学習に関するテクニック この章では、NN学習でキーとなるアイデアについて学ぶ。 パラメータの更新 重みの初期値 Batch Normalization 正則化 ハイパーパラメータの検証 まとめ パラメータの更新について。 最適化optimizationとは:NN学習目的である「…

5章 誤差逆伝播法(ごさぎゃくでんぱほう)Backpropagation『ゼロから作るDeep Learning』

5章誤差逆伝播法 いよいよ誤差逆伝播法まできた。 数式より計算グラフの方が理解しやすいらしい。 詳しくは本書参照。 まずはレイヤ概念の導入。 レイヤ(層)とは:NNにおける機能の単位を指す。レイヤ単位で実装することで、ブロックのように積み上げていけ…

ニューラルネットワークを図解するためグラフ描画ツールgraphviz導入

こんな感じのグラフがスクリプトで作成できるgraphviz 以下、ギャラリー。 Gallery | Graphviz - Graph Visualization Software まずは、インストール。 # まずは、Anacondaでgraphvizパッケージをインストール conda install -c anaconda graphviz=2.38.0 #…

2〜4章まとめの確認問題『ゼロから作るDeep Learning』

いったん4章までの復習がてら、2・3・4章末まとめから問題を作成してみる。 2章 ・パーセプトロンは、ある◯◯を与えたら、決まった◯◯を行うアルゴリズムである。 ・パーセプトロンでは、◯◯と◯◯をパラメータとして設定する。 ・パーセプトロンを用いれば、◯…

4章ニューラルネットワークの学習 学習アルゴリズムの実装『ゼロから作るDeep Learning』

4章続き。 学習アルゴリズムの実装 改めて学習とは:適応可能な重みとバイアスを訓練データに適応するように調整すること 学習の4ステップ ステップ1:ミニバッチをランダムに選択 ステップ2:ミニバッチの損失関数を減らす勾配を算出 ステップ3:重みパ…

4章ニューラルネットワークの学習 数値微分、偏微分、勾配法、学習率『ゼロから作るDeep Learning』

『ゼロから作るDeep Learning』4章続き。 微分とは:ある瞬間の変化量 数値微分numerical differentiationとは:微小な差分によって微分を求めること def numerical_diff(f, x): h = 1e-4 #0.0001程度の値が適当な微小値 return ( f(x+h) - f(x-h) ) / (2*h)…

4章ニューラルネットワークの学習 データ駆動アプローチ、損失関数、ミニバッチ『ゼロから作るDeep Learning』

3章ではニューラルネットワークの「推論」を実装したが、4章からニューラルネットワークの「学習」を実装する。 「学習」とは:訓練データから最適な重みパラメータ値を自動で獲得すること パラメータの数は、実際数千〜数億にも及ぶため、手動で調整するこ…

手書き数字認識とバッチ処理『ゼロから作るDeep Learning』

『ゼロから作るDeep Learning』3章最後 いよいよ手書き数字認識に入る。ここでは、「学習」フェーズは完了している前提で、「推論」フェーズのみ順方向伝播方式で実施。 # MNISTという手書き数字画像セットを準備 # git clone https://github.com/oreilly-ja…

出力層の設計(分類問題で使うソフトマックス関数)『ゼロから作るDeep Learning』

『ゼロから作るDeep Learning』3章続き # ニューラルネットワークの問題は、回帰問題と分類問題に大別できる # 回帰問題とは、入力データから数値予測を行う問題(例 入力:人物画像 → 出力:体重予測) # 分類問題とは、入力データがどのクラスに属するかと…

ニューラルネットワーク フォワード方向処理『ゼロから作るDeep Learning』3章

『ゼロから作るDeep Learning』3章続き。 ニューラルネットワークの順方向forward処理について。 # 順方向forward処理:入力から出力方向への伝達処理。あとで逆方向backward処理について学ぶ # 以下3層ニューラルネットワーク構成とする # 入力層(第0層) #…

Pythonで自作関数をモジュールとして読み込む

参考: Python3のimport・下位/上位階層のモジュールをインポートしたい【import】【Python3】 - DRYな備忘録 『ゼロから作るDeep Learning』で自作関数がだんだん説明なしに使われていくので、いったんモジュールにまとめて読み込むことにする。 本番環境な…

ニューラルネットワーク計算準備としてNumPyで多次元配列処理(内積=ドット積)

『ゼロから作るDeep Learning』3章続き。 ニューラルネットワークの実装で多次元配列が必要。 そこでPythonのNumPyの多次元配列操作を改めて詳しく学ぶ。 >>> import numpy as np >>> A = np.array([ [1,2], [3,4], [5,6] ]) >>> A array([[1, 2], [3, 4], […

『ゼロから作るDeep Learning』ソースコード、正誤表

ソースコードは本を写経していたが、 独自のライブラリを使って説明があったので ソースコードリポジトリを参照した github.com 正誤表もついていて、間違いを正せる。 5章まるごと「連鎖律」を「連鎖率」に間違えるという 盛大な誤植を見つけたので、ちょっ…

3章ニューラルネットワーク(ステップ関数・シグモイド関数・ReLU関数)『ゼロから作るディープラーニング』

3章になって結構重くなってきたので、ゆっくりやっていく。 ・活性化関数activation function:入力信号の総和を出力信号に変換する関数 ・ステップ関数(階段関数):閾値を境にして出力が切り替わる関数 ・パーセプトロンでは、ステップ関数を使っている d…