タグ

ブックマーク / aidiary.hatenablog.com (20)

  • Echo Sequence Prediction Problem - 人工知能に関する断創録

    Long Short-Term Memory Networks With Python(2018/8/20)のつづき。 今回は、Echo Sequence Prediction Problemという単純なタスクを対象にKerasとPyTorchのVanilla LSTMの実装方法を比較してみます。 Echo Sequence PredictionProblem Echo Sequence Prediction Problemとは、ランダムな整数の系列を入力とし、入力系列の特定の時刻の値を出力する単純なタスクです。時刻はネットワークへの入力とせずに固定します。例えば、入力系列として [5, 3, 2] を入力とした場合、時刻1の要素を返すモデルは 3 を出力します。 系列を入力として、要素を1つだけ返すのでMany-to-one型のLSTMです。こんなモデルが何の役に立つのか?というと・・・

    Echo Sequence Prediction Problem - 人工知能に関する断創録
  • PyTorch (11) Variational Autoencoder - 人工知能に関する断創録

    今回は、Variational Autoencoder (VAE) の実験をしてみよう。 実は自分が始めてDeep Learningに興味を持ったのがこのVAEなのだ!VAEの潜在空間をいじって多様な顔画像を生成するデモ(Morphing Faces)を見て、これを音声合成の声質生成に使いたいと思ったのが興味のきっかけだった。 今回の実験は、PyTorchの公式にあるVAEのスクリプト を自分なりに読み解いてまとめてみた結果になっている。 180221-variational-autoencoder.ipynb - Google ドライブ さっそく実験!いつものimport。 import os import numpy as np import torch import torch.nn as nn import torch.utils.data import torch.optim a

    PyTorch (11) Variational Autoencoder - 人工知能に関する断創録
    tnal
    tnal 2018/03/01
  • Chainerによる畳み込みニューラルネットワークの実装 - 人工知能に関する断創録

    Chainerによる多層パーセプトロンの実装(2015/10/5)のつづき。今回はChainerで畳み込みニューラルネットワーク(CNN:Convolutional Neural Network)を実装した。Theanoによる畳み込みニューラルネットワークの実装 (1)(2015/6/26)で書いたのと同じ構造をChainerで試しただけ。タスクは前回と同じくMNIST。 今回は、MNISTデータの取得や訓練/テストの分割にscikit-learnの関数を使ってみた。 Chainerで畳み込みをするためには、訓練データの画像セットを(ミニバッチサイズ、チャンネル数、高さ、幅)の4次元テンソルに変換する必要がある(ここに書いてある)。今回はチャンネル数が1なので単純にreshapeで変形できる。 3チャンネルのカラー画像だとnumpyのtranspose()で4次元テンソルに変換できるみたい

    Chainerによる畳み込みニューラルネットワークの実装 - 人工知能に関する断創録
  • Chainerによる多層パーセプトロンの実装 - 人工知能に関する断創録

    これまでDeep LearningのアルゴリズムをTheanoで実装してきた(2015/4/29)けれど、ここらで巷で大人気のライブラリChainerにも手を出してみた。Theanoの勉強を始めたあとすぐにChainerが公開された(2015/6/9)がユーザや情報が増えるまで待っていた感じ(笑)最近はコードや実験結果などを公開してくれる人が増えてきたので非常に参考になっている。目についたものはてぶに登録しているので、興味を持った手法はがしがし勉強して追試していきたい。 Chainerのバージョンは1.3.2をベースにしている。1.3からPyCUDA/scikit-cudaを独自ライブラリのCuPyに置き換えたとのことで、以前のコードは少し修正しないと動かないようだ。その分、1.3からはインストールがシンプルになっていてとてもうれしい。1.1のころは、Chainerと直接関係ないPyCUD

    Chainerによる多層パーセプトロンの実装 - 人工知能に関する断創録
  • 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についての説明。訓練データをK個のサブセットに分割し、そのうち1つのサブセットをテストデータに残りK-1個のサブセットを訓練データにして評価する。これをテストデータを入れ替えながらK回評価し、その平均を求める。 この手順は下のように書ける。bool型のマスクを使ってテストデータと訓練データをわけている。 k = 5 n_samples = len(X) fold_size = n_samples // k scores = [] masks = [] for fold in ran

    Machine Learning with Scikit Learn (Part II) - 人工知能に関する断創録
  • Machine Learning with Scikit Learn (Part I) - 人工知能に関する断創録

    今年の7月に開催されたSciPy2015の講演動画がEnthoughtのチャンネルで公開されている。今年も面白い講演が多いのでいろいろチェックしている。 今年の目標(2015/1/11)にPython機械学習ライブラリであるscikit-learnを使いこなすというのが入っているので、まずはscikit-learnのチュートリアルを一通り見ることにした。 Part IとPart IIを合わせると6時間以上あり非常に充実している。IPython Notebook形式の資料やデータは下記のGitHubアカウントで提供されている。ノートブックをダウンロードし、実際に手を動かしながらチュートリアルを進めると理解がより進むかもしれない。 あとで振り返りやすいように内容を簡単にまとめておきたい。 1.1 Introduction to Machine Learning 機械学習システムの流れ。教師あ

    Machine Learning with Scikit Learn (Part I) - 人工知能に関する断創録
  • Theanoの使い方 (2) 自動微分 - 人工知能に関する断創録

    Theanoの使い方 (1) シンボルと共有変数(2015/5/9)のつづき。 今回はTheanoの自動微分を試してみる。ロジスティック回帰やニューラルネットなど勾配降下法を使うアルゴリズムではパラメータの更新式にコスト関数(誤差関数) の微分が必要になる。 通常、誤差関数の微分 を紙の上で解いてからその結果の数式を実装する。たとえば、前に実装した多層パーセプトロンによる関数近似(2015/1/22)では、手順 (4) で誤差関数の微分を手計算で求めてから実装している。 しかし、コスト関数が複雑になってくるとこの微分を手で計算するのは面倒くさいし間違いやすい。Theanoの自動微分では、コスト関数とどの変数について微分するかを与えるだけで自動的に微分を計算してくれるのだ。まずは、手計算できる簡単な微分を計算してみよう。 例1 まずは簡単な例で を計算してみよう。手で計算すると となることが

    Theanoの使い方 (2) 自動微分 - 人工知能に関する断創録
  • Deep Learning リンク集 - 人工知能に関する断創録

    乗るしかないこのビッグウェーブに Deep Learning(深層学習)に関連するまとめページとして使用する予定です。Deep Learningに関する記事・スライド・論文・動画・書籍へのリンクをまとめています。最新の研究動向は全然把握できていないので今後研究を進めるなかで記録していきたいと思います。読んだ論文の概要も簡単にまとめていく予定です。ブログでは、当面の間、Theanoを使って各種Deep Learningアルゴリズムを実装していきたいと思います。 関連ニュースなどはTwitterでも流しているので興味があったらフォローしてください。 すべてに目が通せず更新が追いついていません。私のはてなブックマークで[Deep Learning]というタグを付けて登録しています。まったく整理できていませんがご参考まで。 Theano編 TheanoをWindowsにインストール(2015/1

    Deep Learning リンク集 - 人工知能に関する断創録
  • 人工知能を実現する学習アルゴリズムに必要な能力 - 人工知能に関する断創録

    今年は、Deep Learningを研究する予定(2014/1/4)だったのだけれど、多層パーセプトロンまで到達した(2014/2/5)ところで少々(?)足踏みしている。Deep Learningの構成要素であるボルツマンマシンを理解するのに手間取っているためだ。ボルツマンマシンの理解には、マルコフ確率場やMCMCの理解が必要なことがわかったので少し廻り道してモンテカルロ法を先に勉強(2014/6/20)していたというわけ。 ただ、そればかりでは少々退屈になってきたので少し先回りして Deep Learning の先駆者のBengioさんが書いた論文 Learning Deep Architectures for AI を勉強している。示唆に富む見解が多いのであとで振り返られるように記録しておきたい。 まずは、1.1節のDesiderate for Learning AIの部分。人工知能

    人工知能を実現する学習アルゴリズムに必要な能力 - 人工知能に関する断創録
    tnal
    tnal 2014/09/12
  • Pythonでゲーム作りますが何か?のGitHubリポジトリをEclipseで読み込む - 人工知能に関する断創録

    Javaゲーム作りますが何か?のGitHubリポジトリをEclipseで読み込む(2014/9/6)に引き続き、Pythonゲーム作りますが何か?の全スクリプトもGitHub上で公開しました。 この記事では、GitHubのリポジトリをCloneしてEclipseに読み込む方法をまとめておきます。PygameはほとんどをMacで作っていたためMacの開発環境を前提に書きますが、WindowsでもEclipseの操作方法はほとんど同じです。 1. Eclipseのダウンロード Eclipse のサイトからEclipse Standardをダウンロードします。Python以外にJavaC++を使う場合はそれらの同梱版をダウンロードしてもいいと思います。2014年9月9日現在、最新版はEclipse Lunaです。Mac OS Xの種類によって32Bit版か64Bit版をダウンロードします。

    Pythonでゲーム作りますが何か?のGitHubリポジトリをEclipseで読み込む - 人工知能に関する断創録
  • Pythonによるモンテカルロ法入門 - 人工知能に関する断創録

    PRMLの11章で出てくるマルコフ連鎖モンテカルロ法(Markov chain Monte Carlo methods: MCMC)。ベイズでは必須と呼ばれる手法だけれどいまいち理屈もありがたみもよくわからなくて読み飛ばしていました。 最近、ボルツマンマシンを勉強していて、ベイズと関係ないのにマルコフ連鎖やらギブスサンプラーやらが出てきて格的にわからなくなってきたのでここらで気合を入れて勉強し直すことにしました。 参考にした書籍は「Rによるモンテカルロ法入門」です。PRMLと同じく黄色いなので難易度が高そう・・・このはR言語を使って説明がされていますが、それをPythonで実装しなおしてみようかなーと計画中。numpy、scipyの知らなかった機能をたくさん使うので勉強になりそう。 ただRにしかないパッケージを使われると途中で挫折する可能性が高い・・・あと内容が難しすぎて途中で挫折す

    Pythonによるモンテカルロ法入門 - 人工知能に関する断創録
  • 共役勾配法によるニューラルネットのパラメータ推定 - 人工知能に関する断創録

    Courseraの機械学習ネタの続き。前回は、ロジスティック回帰のパラメータ推定(2014/4/15)に共役勾配法(Conjugate Gradient: CG法)を使いました。今回はより複雑なニューラルネット(多層パーセプトロン)のパラメータ推定に共役勾配法を適用してみました。 以前、多層パーセプトロンで手書き数字認識の実験をしたとき(2014/2/1)は、共役勾配法ではなく、勾配降下法(Gradient Descent)を用いてパラメータの更新式を自分で書いていました。 self.weight1 -= learning_rate * np.dot(delta1.T, x) self.weight2 -= learning_rate * np.dot(delta2.T, z) 勾配降下法は、学習率(learning rate)を適切な値に設定しないと収束が遅い、発散するなど欠点があります

    共役勾配法によるニューラルネットのパラメータ推定 - 人工知能に関する断創録
  • 共役勾配法によるロジスティック回帰のパラメータ推定 - 人工知能に関する断創録

    Courseraの機械学習ネタの続き。今回はロジスティック回帰をやってみます。回帰と付くのになぜか分類のアルゴリズム。以前、PRMLの数式をベースにロジスティック回帰(2010/4/30)を書いたけど今回はもっとシンプル。以下の3つの順にやってみたいと思います。 勾配降下法によるパラメータ最適化 共役勾配法(2014/4/14)によるパラメータ最適化(学習率いらない!速い!) 正則化項の導入と非線形分離 ロジスティック回帰は線形分離だけだと思ってたのだけど、データの高次の項を追加することで非線形分離もできるのか・・・ 使用したデータファイルなどはGithubにあります。 https://github.com/sylvan5/PRML/tree/master/ch4 勾配降下法によるパラメータ最適化 2クラスのロジスティック回帰は、y=0(負例)またはy=1(正例)を分類するタスク。ロジステ

    共役勾配法によるロジスティック回帰のパラメータ推定 - 人工知能に関する断創録
  • 多層パーセプトロンでMNISTの手書き数字認識 - 人工知能に関する断創録

    多層パーセプトロンで手書き数字認識(2014/2/1)の続き。今回は、簡易版のdigitsデータではなく、MNISTのより大規模な手書き数字データを使って学習してみます。 MNISTデータ MNISTは、28x28ピクセル、70000サンプルの数字の手書き画像データです。各ピクセルは0から255の値を取ります。まずは、digitsデータの時と同様にMNISTのデータを描画してどのようなデータなのか確認してみます。MNISTのデータは上記サイトからダウンロードしなくてもscikit-learnのfetch_mldata()関数でWebから取得できます。取得するのは初回実行時だけで二回目以降は第二引数のdata_homeに指定した場所に保存されます。 #coding: utf-8 import numpy as np import pylab from sklearn.datasets imp

    多層パーセプトロンでMNISTの手書き数字認識 - 人工知能に関する断創録
  • 多層パーセプトロンで手書き数字認識 - 人工知能に関する断創録

    多層パーセプトロンが収束する様子(2014/1/23)の続き。数字認識は前にニューラルネットによるパターン認識(2005/5/5)をJavaで作りましたが今回はPythonです。 今回は、多層パーセプトロンを用いて手書き数字を認識するタスクを実験します。今回からscikit-learnというPython機械学習ライブラリを活用しています。ただ、scikit-learnには多層パーセプトロンの正式な実装はない*1ため多層パーセプトロンのスクリプトはオリジナルです。今回から比較的大きなデータを扱うためなるべく高速に動作し、かつPRMLと変数名を合わせることで理解しやすいようにしました。 digitsデータ 手書き数字データは、MNISTというデータが有名です。PRMLの付録Aでも紹介されています。今回はいきなりMNISTではなく、scikit-learnのdigitsというより単純なデータセ

    多層パーセプトロンで手書き数字認識 - 人工知能に関する断創録
  • 多層パーセプトロンが収束する様子 - 人工知能に関する断創録

    多層パーセプトロンによる関数近似(2014/1/22)の続きです。 もう少しスクリプトを改造し、実際に各重みと出力がどのように収束するかアニメーションにしてみました。ほとんどの関数は最初に急激に変化したあとだんだん収束していく様子が見てとれます。|x|は最初は誤差が減らずローカルミニマムにはまったかな?と思ったのですが、しばらく待っていたら急激に誤差が減りました。よかった、よかった。 残りは http://www.youtube.com/channel/UC4DmXhmsKZT48cRD6znEXaw このアニメーションを実行するスクリプトです。matplotlibにwxPythonを組み合わせることでアニメーションを実現しています。このアニメーションの書き方は、短時間フーリエ変換(2011/7/16)でも使いました。 次回は、数字の手書きデータを認識するニューラルネットを作りたいと思いま

    多層パーセプトロンが収束する様子 - 人工知能に関する断創録
  • 多層パーセプトロンによる関数近似 - 人工知能に関する断創録

    パターン認識と機械学習(PRML)まとめ(2010/8/29)の続きです。以下、つづくかも?になってましたが、2014年はDeep Learningを勉強しよう(2014/1/4)と思っているので、関連するニューラルネットワーク関係の実験結果をもう少し追記します。 今回は、PRMLの5章ニューラルネットワークの中から図5.3にある多層パーセプトロンによる関数近似をPythonで実装してみました。 上の図にあるようにxを入れたときにsin(x)の近似値を出力するようなニューラルネットワークを学習します。もっと詳しく言うと (x, sin(x)) のたくさんの組(訓練データ)を教師データとして用いて、xを入れたときにsin(x)の近似値を出力するようにニューラルネットワークの重みを更新します。 多層パーセプトロン(Multilayer perceptron) p.228にあるようにバイアスパラ

    多層パーセプトロンによる関数近似 - 人工知能に関する断創録
  • Complexity Explorer - 人工知能に関する断創録

    複雑系の研究で有名なサンタフェ研究所がComplexity Explorerという複雑系のオープンコースを公開しています。今流行のいわゆるMOOC(Massive open online course)というやつです。教授のビデオレクチャーを毎週受けて、宿題を解いて、テストを受けるという一般的なコースです。宿題やテストはオプションなので嫌なら特にやる必要はないみたいですよ(笑) 2013年9月29日からIntroduction to Complexityという複雑系入門の講義が公開されています。 What is Complexity? Dynamics and Chaos Fractals Information, Order, and Randomness Genetic Algorithms Cellular Automata Models of Self-Organization C

    Complexity Explorer - 人工知能に関する断創録
  • ライフゲームの世界 - 人工知能に関する断創録

    ニコニコ動画の複雑系コミュニティの発起人のはむくんがライフゲームの世界というとても面白い動画を投稿されています。Twitterでは何度かツイートしてたけど完結したのでブログでも紹介させていただきます。 ライフゲームの世界1 John Horton Conwayが提案したライフゲーム(Conway's Game of Life)の基的なルールを解説しています。また頻繁に現れる4種の物体(ブロック、蜂の巣、ブリンカー、グライダー)を紹介しています。最後の作品紹介は、P416 60P5H2V0 gunというすさまじいパターンが出てきます。グライダー銃から発射したグライダーたちが滑走路を通ります。グライダーの集合先では、発射された複数のグライダーが合体して宇宙船が組み立てられます。 ライフゲームの世界2 いろんな振動子(パルサー、タンブラー、銀河)が鑑賞できます。作品紹介では大量の振動子が勢揃い

    ライフゲームの世界 - 人工知能に関する断創録
  • SciPyでベクトル量子化 - 人工知能に関する断創録

    ベクトル量子化(Vector Quantization: VQ)とは、ベクトルで表されたデータ集合を有限個の代表的なパターン(セントロイド)に置き換える処理のことです。代表パターン(セントロイド)のリストはコードブック(code book)と呼ばれます。また、クラスタの番号をコードと呼びます。各ベクトルデータは、距離が一番近いコードに置き換えられます。大量のデータを少ない代表パターンで置き換えることができるためデータの圧縮に使えます。ただし、コードブックから元のデータは復元できないため非可逆圧縮になります。 コードブックを学習するためのアルゴリズムの代表例がk-meansクラスタリングです。ベクトルデータをクラスタリングして、各データをそのデータが属するクラスタのセントロイドに置き換えることでベクトル量子化が実現できます。 ベクトル量子化の応用 ベクトル量子化の応用例の一つに、前に取り上げ

    SciPyでベクトル量子化 - 人工知能に関する断創録
  • 1