人工知能に関する断創録

人工知能、認知科学、心理学、ロボティクス、生物学などに興味を持っています。このブログでは人工知能のさまざまな分野について調査したことをまとめています。最近は、機械学習、Deep Learning、Kerasに関する記事が多いです。



Dogs vs. Cats Redux

今回はPractical Deep Learning for CodersのLesson1の結果をまとめてみた。題材はKaggleの犬・猫分類。

Practical Deep Learning for Coders

最近、fast.aiのPractical Deep Learning for CodersというMOOCを受講している。 この講座は 無料 動画形式の講義(1回2時間というボリューム) Jupyter NotebookとKerasを使用 CNN、Finetuning、VGG16、ResNet、RNNなどが実践的な例題を通して学べる 実務家…

畳み込みニューラルネットワークの可視化

Deep Learningの学習結果(重み)はブラックボックスで、隠れ層のユニット(特に深い層の!)が一体何を学習したのかがよくわからないと長年言われてきた。しかし、今回紹介する方法を使うとニューラルネットが何を学習したのか目で見える形で表現できる。 …

15周年記念

2017年2月21日で人工知能に関するブログ(というか自分のWebサイト)を初めてから15周年を迎えます。基本的に飽きっぽい性格ですが、こんなに続いたのは読んで応援してくださったみなさんのおかげだと思います。ありがとうございます! ここら辺で15年を振り…

VGG16のFine-tuningによる17種類の花の分類

前回(2017/1/10)は、VGG16をFine-tuningして犬か猫を分類できる2クラス分類のニューラルネットワークを学習した。今回は、同様のアプローチで17種類の花を分類するニューラルネットワークを学習してみたい。前回の応用編みたいな感じ。この実験はオリジナ…

VGG16のFine-tuningによる犬猫認識 (2)

VGG16のFine-tuningによる犬猫認識 (1) (2017/1/8)のつづき。 前回、予告したように下の3つのニューラルネットワークを動かして犬・猫の2クラス分類の精度を比較したい。 小さな畳み込みニューラルネットをスクラッチから学習する VGG16が抽出した特徴を使…

VGG16のFine-tuningによる犬猫認識 (1)

VGG16はILSVRCのコンペ用に学習されたニューラルネットなのでImageNetの1000クラスを認識できる。しかし、前の記事(2017/1/4)で実験したように「ひまわり」のようなImageNetに存在しないクラスはそのままでは認識できない。 この問題を解決するためVGG16の…

KerasでVGG16を使う

今回は、Deep Learningの画像応用において代表的なモデルであるVGG16をKerasから使ってみた。この学習済みのVGG16モデルは画像に関するいろいろな面白い実験をする際の基礎になるためKerasで取り扱う方法をちゃんと理解しておきたい。 ソースコード: test_vg…

2017年の目標

明けましておめでとうございます。 今年も目標を立てた。何が起こるか先が読めないご時世なので予定通りには行かないと思うけど(^^;; Deep Learningの深耕 今年も一昨年(2014/1/4)、昨年(2015/1/11)に引き続いてDeep Learningに関連した技術を深耕してい…

2016年の振り返り

年末なので年始に立てた目標(2016/1/1)の振り返りでもしようかな。 ○ Deep Learning Tutorialの読破とTheanoでの実装を続ける △ パターン生成・コンテンツ生成(2015/12/30)に関する従来研究のサーベイ × 深層強化学習(Deep Reinforcement Learning)の…

Kerasによるデータ拡張

今回は、画像認識の精度向上に有効な データ拡張(Data Augmentation) を実験してみた。データ拡張は、訓練データの画像に対して移動、回転、拡大・縮小など人工的な操作を加えることでデータ数を水増しするテクニック。画像の移動、回転、拡大・縮小に対し…

KerasでCIFAR-10の一般物体認識

今回は、畳み込みニューラルネットを使ってCIFAR-10(2015/10/14)の一般物体認識をやってみた。以前、Chainerでやった(2015/11/8)のをKerasで再実装した。 これもKerasの例題に含まれている。このスクリプトでは、データ拡張(Data Augmentation)も使っ…

Kerasによる畳み込みニューラルネットワークの実装

前回(2016/11/9)はMNISTの数字認識を多層パーセプトロンで解いたが、今回は畳み込みニューラルネットを使って解いてみた。このタスクもKerasの例題に含まれている。ソースコードを見れば大体何をやっているかつかめそうだけどポイントを少しまとめておく。…

KerasでMNIST

今回は、KerasでMNISTの数字認識をするプログラムを書いた。このタスクは、Kerasの例題にも含まれている。今まで使ってこなかったモデルの可視化、Early-stoppingによる収束判定、学習履歴のプロットなども取り上げてみた。 ソースコード: mnist.py MNISTデ…

Kerasによる多クラス分類(Iris)

今回は、機械学習でよく使われるIrisデータセットを多層パーセプトロンで分類してみた(ありがち)。Irisデータセットのクラスラベルは3つ(setosa, versicolor, virginica)あるので前回までと違って多クラス分類になる。短いプログラムなので全部載せてポ…

Kerasによる2クラス分類(Pima Indians Diabetes)

Kerasのプログラミングは データのロード モデルの定義 モデルのコンパイル モデルの学習 モデルの評価 新データに対する予測 という手順が一般的。今回はもう少し実践的なデータを使ってこの流れをつかみたい。 ソースコード:pima.py 1. データのロード 参…

Kerasによる2クラスロジスティック回帰

まずはもっとも簡単な2クラスロジスティック回帰モデルをKerasで書いてみる。前にTheanoでやった(2015/5/19)のをKerasで書き換えただけ。ロジスティック回帰は、回帰とつくけど分類のアルゴリズムで、隠れ層がなく、活性化関数にシグモイド関数を使ったニ…

Kerasのインストール

こういうインストール関係の記事はすぐ時代遅れになるので詳細は省くけど、現在の自分の環境など簡単にまとめておきたい。 Ubuntu 16.04 Python 3.5 Anaconda 4.2.0 TensorFlow 0.11 Keras 1.1.0 1. Ubuntuの仮想マシンを作成 普段はWindowsマシンを使ってい…

Kerasはじめます

前回の更新(2016/3/18)からいろいろあってだいぶ間があいてしまいましたが、気を取り直してまた何か書いていこうと思います!しばらくは、Deep Learningのライブラリ Keras を使ってさまざまな実験をしていきます。Theanoでの実装(2015/4/29)はきついの…

深層学習ライブラリ Keras

ここ1年くらいDeep Learning Tutorialを読みながらTheanoというライブラリで深層学習のアルゴリズムを実装してきた。 深層学習の基本的なアルゴリズムならTheanoでガリガリ書くこともできたがより高度なアルゴリズムをTheanoでスクラッチから書くのはとても…

制限ボルツマンマシン (RBM) の導出 (2)

制限ボルツマンマシン (RBM) の導出 (1) (2016/3/20)のつづき。前回は可視層を固定したときの隠れ層の分布と隠れ層を固定したときの可視層の分布を導出した。今回は、RBMの対数尤度関数の導出とそのパラメータでの偏微分の式を導出していきたい。 深層学習…

制限ボルツマンマシン (RBM) の導出 (1)

ボルツマンマシン(隠れ変数あり)の導出(2016/3/12)のつづき。Deep Learningの基礎モデルとして有名な制限ボルツマンマシン(Restricted Boltzmann Machine: RBM)を導出したい。深層学習の2.7節に当たる。前回と同様に表記法はこの本に準拠する。 深層学…

ボルツマンマシン(隠れ変数あり)の導出

ボルツマンマシン(可視変数のみ)の導出(2016/3/11)のつづき。前回はボルツマンマシンを構成するノードがすべて可視変数(観測データが与えられる)ケースだったけれど今回は一部のノードが隠れ変数(観測データが与えられない)ケースのボルツマンマシン…

ボルツマンマシン(可視変数のみ)の導出

制限ボルツマンマシンのアルゴリズムの導出が難しかったので忘れないようにまとめておいた。今回から数回にわたって 可視変数のみのボルツマンマシンの導出(2.4節) 隠れ変数ありのボルツマンマシンの導出(2.5節) 制限ボルツマンマシンの導出(2.7節) の…

積層自己符号化器の性能評価

Theanoによる積層自己符号化器の実装(2016/1/22)の続き。 今回は、積層自己符号化器の事前学習(pretraining)の効果が本当にあったのか検証してみたい。ついでにもう一つTheanoによる雑音除去自己符号化器の実装(2015/12/9)で書いた雑音除去(denoising…

Theanoによる積層自己符号化器の実装

Theanoによる雑音除去自己符号化器の実装(2015/12/9)の続き。今回は自己符号化器を積み上げて積層自己符号化器を実装した。 多層パーセプトロンは隠れ層の数を増やす(Deepにしていく)とより複雑なモデルを表現できるようになるが、誤差が伝播されずに重…

2016年の目標

あけましておめでとうございます。 今年もいくつか目標を立てた。メインは去年と同じく深層学習(Deep Learning)の深耕にした。 機械学習・深層学習の深耕 Deep Learning Tutorialの読破とTheanoでの実装を続ける パターン生成・コンテンツ生成(2015/12/30…

2015年まとめ

2015年目標(2015/1/11)のつづき。今年ももう終わりということで目標に対する振り返り。今年は4つ目標を立てていた。 (1) Deep Learningの勉強 ◎ Deep Learningの勉強・研究は今年から本格的に始めた。主にDeep Learning Tutorialを読み、Theanoで実装しな…

人工知能によるコンテンツ生成と著作権

今朝の読売新聞に面白い記事があったのでご紹介。 AI芸術著作権は? 人工知能(AI)が自動的に作った楽曲や小説は「誰の作品」になるのか。政府は「AIアート」が将来、本格的に普及するとみて、 年明けから著作権のあり方について議論を始める。 そもそも著…

Theanoによる雑音除去自己符号化器の実装

この記事はDeep Learning Advent Calendar 2015の9日目です。 Theanoによる自己符号化器の実装(2015/12/3)の続き。 今回は自己符号化器を継承して雑音除去自己符号化器(Denoising autoencoder)を実装した。 ソースコード全体はここ。 自己符号化器は入力…

Theanoによる自己符号化器の実装

今回からしばらくさまざまな自己符号化器(Autoencoder)を検証していきたい。深層学習のメリットである特徴の自動学習の基礎になるところなのでしっかり理解しておきたいところ。

ChainerによるCIFAR-10の一般物体認識 (2)

ChainerによるCIFAR-10の一般物体認識 (1)(2015/11/8)のつづき。今回は畳み込みニューラルネットワークの畳込み層の数を変えたときにテスト精度がどのように変わるか調査した。前回と同じくCIFAR-10の一般物体認識をタスクとしている。 畳み込み2層(conv2…

ChainerによるCIFAR-10の一般物体認識 (1)

Chainerによる畳み込みニューラルネットワークの実装(2015/10/7)のつづき。今回はMNISTの数字画像認識ではなく、CIFAR-10(2015/10/14)という画像データを使った一般物体認識をやってみた。画像を10個のクラスに分類するタスク。実装にはChainerを使った。…

CIFAR-10

MNISTの数字画像はそろそろ飽きてきた(笑)ので一般物体認識のベンチマークとしてよく使われているCIFAR-10という画像データセットについて調べていた。 このデータは、約8000万枚の画像がある80 Million Tiny Imagesからサブセットとして約6万枚の画像を抽…

Chainerによる畳み込みニューラルネットワークの実装

Chainerによる多層パーセプトロンの実装のつづき。今回はChainerで畳み込みニューラルネットワーク(CNN:Convolutional Neural Network)を実装した。Theanoによる畳み込みニューラルネットワークの実装 (1)で書いたのと同じ構造をChainerで試しただけ。タス…

Chainerによる多層パーセプトロンの実装

今回は、最初ということでChainerに付属している多層パーセプトロンのコードを動かしてみるところから始めた。

Machine Learning with Scikit Learn (Part IV)

Machine Learning with Scikit Learn (Part III)(2015/9/8)のつづき。5.2節ではSupport Vector Machine (SVM)が詳しく取り上げられている。 5.2 In Depth - Support Vector Machines scikit-learnでは分類用のSupport Vector Classifierssklearn.svm.SVCと…

Machine Learning with Scikit Learn (Part III)

Machine Learning with Scikit Learn (Part II)(2015/8/26)のつづき。今回は、Part IIの動画の5.1節の内容を簡単にまとめた。書いてたら長くなったので5.1節だけ。 5.1 In Depth - Linear Models 回帰のための線形モデルの詳細が取り上げられている。線形…

Machine Learning with Scikit Learn (Part II)

Machine Learning with Scikit Learn (Part I)(2015/8/10)のつづき。今回は、後編のPartIIの動画の内容を簡単にまとめたい。 4.1 Cross Validation ラベル付きデータが少ないときに有効な評価法であるK-fold cross-validationについての説明。訓練データを…

Machine Learning with Scikit Learn (Part I)

今年の7月に開催されたSciPy2015の講演動画がEnthoughtのチャンネルで公開されている。今年も面白い講演が多いのでいろいろチェックしている。 今年の目標(2015/1/11)にPythonの機械学習ライブラリであるscikit-learnを使いこなすというのが入っているので…

Theanoによる畳み込みニューラルネットワークの実装 (2)

Theanoによる畳み込みニューラルネットワークの実装 (1)(2015/6/26)のつづき。今回は前回できなかった ConvLayerとPoolingLayerの分離 ReLUの導入 を試してみた。 ConvLayerとPoolingLayerの分離 Deep Learning Tutorialの実装では、LeNetConvPoolLayer()…

Theanoによる畳み込みニューラルネットワークの実装 (1)

Theanoによる多層パーセプトロンの実装(2015/6/18)のつづき。今回は、Deep Learning Tutorialの畳み込みニューラルネットワーク(Convolutional Neural Network: CNN, ConvNet)を実装してみる。 CNNは人間の視覚野を参考にした手法であり、画像認識に特化…

Theanoによる多層パーセプトロンの実装

Theanoによるロジスティック回帰の実装(2015/5/26)のつづき。今回は、Deep Learning Tutorialの多層パーセプトロン(Multilayer Perceptron)を実装してみる。タスクは前回と同じMNISTの手書き数字認識。多層パーセプトロンはこれまでも何回か実装してきた…

Theanoによるロジスティック回帰の実装

Theanoによる2クラスロジスティック回帰の実装(2015/5/19)のつづき。 今回からDeep Learning Tutorialの内容にそって実装していく。このチュートリアルのコードやデータはGithub上で公開されているのでcloneしておいた。 git clone https://github.com/lis…

Theanoによる2クラスロジスティック回帰の実装

Theanoの使い方 (2) 自動微分(2015/5/18)のつづき。今回は、前回までの知識を使ってTheanoで2クラスロジスティック回帰の実装をしてみたい。 Deep Learning Tutorialの最初に紹介されるアルゴリズムもロジスティック回帰なのだが、こちらはMNISTの数字認識…

Theanoの使い方 (2) 自動微分

Theanoの使い方 (1) シンボルと共有変数(2015/5/9)のつづき。 今回はTheanoの自動微分を試してみる。ロジスティック回帰やニューラルネットなど勾配降下法を使うアルゴリズムではパラメータの更新式にコスト関数(誤差関数) の微分が必要になる。 通常、…

Theanoの使い方 (1) シンボルと共有変数

今回からしばらくの間、Deep Learningの各種アルゴリズムをスクラッチから実装していきたい。Pylearn2などDeep Learningのアルゴリズムを実装したPythonライブラリもあるのでスクラッチから実装する意味はほとんどないのだけれど、今回はアルゴリズムの詳細…

Deep Learning リンク集

乗るしかないこのビッグウェーブに Deep Learning(深層学習)に関連するまとめページとして使用する予定です。Deep Learningに関する記事・スライド・論文・動画・書籍へのリンクをまとめています。最新の研究動向は全然把握できていないので今後研究を進め…

統計的声質変換 (7) GMMによる声質変換

統計的声質変換 (6) 声質変換モデルの学習の続き。今回が統計的声質変換シリーズの最終回です。今回は、前回学習した声質変換モデルを使って本当に声が変換できるか試してみたい。前回やったGMMの学習でにおける各コンポーネント の と と が学習データから…

統計的声質変換 (6) 声質変換モデルの学習

統計的声質変換 (5) scikit-learnのGMMの使い方(2015/3/22)の続き。 今回は、いよいよ声質変換モデルを混合ガウスモデル(GMM)で学習しよう!第3回目(2015/3/4)で述べたようにclbさんの声をsltさんの声に変換することを前提に進める。 今まで「声質変換…