
講座の概要を説明。講座は
の二本柱からなります。
この講座全体の内容について説明します。この講座は大きく分けて4つの柱からなっています。
それぞれの内容と学習方法について説明します。
このコースの講師の自己紹介です。この講座はニューラルネットや深層学習がなかなか難しくて理解が難しいと考えている方をサポートすることができればという思いで作られています。
プログラミングについて学ぶ前に、まずはPython言語とはどういう言語かについて説明します。
そして、開発環境としてAnacondaを入手します。その中のIDE(統合開発環境)であるSpyderを用います。
ここではそれらのツールのダウンロードまでを説明します。
Anacondaの中のアプリであるSpyderを使って実際に簡単なプログラムを入力・実行してみます。Pythonプログラムを実行する方法は大きく分けて、コンソールから直接入力する方法と.pyファイルを実行する方法があります。今回はコンソールから直接入力する方法について学びます。
ここでは実際にSpyderのコンソールを使ってprint()関数を用いた様々な処理を実際に実行してみます。
"Hello World"の表示から始まり、簡単な四則演算を試してみることにします。
変数(へんすう)と演算の処理について説明します。変数はプログラミングにおいて最も重要な概念の一つで値やデータを言える器です。数値や文字列などを入れて様々な演算や処理に用います。
実際に変数を用いた様々な演算について説明します。コンソールを用いて歌い敵に計算などの処理を行う実例を説明します。
続いて変数を用いたより複雑な演算について説明します。代入演算子(だいにゅうえんざんし)は、複雑な代入処理をシンプルにしてくれます。また、()を用いることにより演算の優先順位を変えることが出来ます。
実際にSpyderを使い代入演算子と()による演算を試して見ます。手順で通りに手元で色々試してみてください。
Spyderを用いて、Pythonのソースコード(,pyファイル)を実行する方法について説明します。
プログラムの入力方法から実行方法までを動画で説明します
分岐処理(ぶんきしょり)とは条件によってプログラムの流れを変えることです。
if文は条件分岐の基本です。ここではif文の基本を説明します。
実際に分岐処理について説明します。
if文を用いたサンプルプログラムを実際に実行してみましょう。
続いて条件分岐の更に複雑なケースについて説明します。elseを用いると、ある条件が成り立たなかった場合についての処理いついても言及できます。
また、elifを用いれば複数の選択肢を持つ条件分岐を作ることができます。
else,、elifを実際のサンプルで体験してみます。elifのサンプルでは、数値が偶数か奇数カの判定を、elifのサンプルでは、数値が正、負、0のいずれかの判定をしています。
分岐処理の3回目です。if文のネストと複数の条件の処理について説明します。
様々な複雑な分岐処理を体験してみましょう。
実際にソースコードを動かしてみてください。
繰り返し処理の基本について説明します。
繰り返し処理とは文字通り、指定した回数、もしくはある一定の条件が成り立っている間処理を繰り返すことです。
繰り返し処理はwhile(ホワイル)文とfor(フォー)文がありますが、ここではwhile文について説明します。
実際に簡単なwhileループの事例を紹介します。
数が増えていく事例と減っていく事例について詳しく説明していきます。実際にソースコードを動かしてみて試してみましょう。
繰り返し処理の例として無限ループと多重ループについて説明します。
無限ループとは無限に処理が終わらない繰り返し処理のことで、多重ループはループの中にさらにループがあるようなループのことです。
無限ループと多重ループの実際のサンプルを実行してみます。
whileをはじめとする繰り返し処理は、break(ブレイク)やcontinue(コンティニュー)を使うと流れを帰ることができます。breakを使えばループから抜けることが、continueを使えばループの先導に戻ることができます。
breakとcontinueの処理を実際に見てみます。
breakでループから抜け、continueはループの戦闘に戻ります。
データ構造のうちもっとも頻繁に利用されるlist(リスト)について説明します。
リストは大量のデータを番号をつけて管理をすることができます。
その上、データの追加・挿入・削除などが簡単にできる非常に便利なデータ構造です。
listの説明の実践編です。
今回は.pyファイルのソースプログラムではなく、実際にコンソールに入力するデータをテキストデータとしてダウンロードして下さい。
データ構造のlistは、for文によって繰り返すことができます。
ここでは、listと組み合わせる方法と、それ以外のループの作り方(range関数との組み合わせ)を説明します。
for文を用いるサンプルを実際に実行してみます。
listのみならず、range関数とセットでも繰り返し処理を行うことができます。
データ構造のタプル(tupple)と集合(set)を説明します。タプルはリストの簡易版のようなデータ構造でスピードは速くメモリ消費も少ないのですが、値を書き換えることはできません。
集合は数学の集合の概念のように、集合演算を行うことができます。
タプルと集合を使ったプログラムのサンプルを紹介します。
データ構造の辞書について説明します。辞書とは、キーと値の組み合わせのデータ構造です。
リストの添え字の部分が任意のデータにかわるようなものです。
実際に辞書を使った簡単なプログラムのサンプルを紹介します。
ある程度実用的なプログラミングをするのには欠かせない関数(かんすう)の概念とその記述方法について説明します。関数とは、ある処理の塊で同じようなことを繰り返さなくてはならないときには大変便利です。
関数には引数(ひきすう)と戻り値がありますが、場合によっては省略することもできます。
複雑な修理をひとまとめにしてくれる関数(かんすう)について説明します。関数を用いれば複雑な処理も頻繁に用いる処理も、簡単にひとまとめにしてくれます。
関数には引数(ひきすう)と戻り値がありますが、省略することも可能できます。
関数の応用編として可変長引数(かへんちょうひきすう)という概念について説明します。
通常引数の数は関数ごとに決まっていますがこれを自由に設定できるのが可変長引数です。
可変長引数には大きく分けて、タプルを用いるものと、辞書を用いるものに分かれます。
可変長引数の実際のサンプルを紹介します。
プログラムがある程度長くなってくると複数のファイルに分割する必要があります。そこで、Pythonにはプログラムをモジュール(module)という単位に分割する機能が用意されています。
ここではモジュールの概念とその使い方について実際に説明していきます。
実際にpythonのモジュールを使ったサンプルを紹介します。モジュール全体をimportする方法と、個別のモジュールだけをimportする方法の両方を紹介します。
モジュールの上位概念であるパッケージ(package)について説明します。
実用的なPythonプログラムを作成するためには様々なパッケージを利用したり、場合によっては自分で作らなくてはなりません。ここでは基本的なパッケージの造り方とその利用の方法について説明します。
実際にパッケージを利用する方法について説明します。パッケージの利用において大事なのは__init__.pyと言うファイルです。この設定方法によってパッケージ内のモジュールの利用の仕方が決まってきます。
ここで追加されているサンプルは、ダウンロードする際に.zipでパッケージファイル(pkg.zipおよびpkg2.zip)を追加して有りますので、利用する際には解凍してからスクリプトファイルpkg_sample1.y~pkg_sample4
.pyと同じディレクトリにおいてください。
今回からオブジェクト指向と言う内容について説明します。
オブジェクト指向はプログラムの単位をオブジェクト(Object)と呼ばれるもので考えるプログラミング技法です。このオブジェクトは、クラス(class)と呼ばれる設計図により生成されます。
ここではオブジェクト指向の考え方とクラスの構造について説明します。
クラスをもとにインスタンスを生成し、実行する方法とその仕組みについて説明します。
クラスが生成されるとまずコンストラクタが実行されます。その後メソッドを操作するなどしてインスタンスに対する処理を行います。
クラスがあれば複数のインスタンスを生成することができます。人が異なれば名前が違うようにインスタンスが異なれば同じクラスから生成されたインスタンスでもメソッドの実行結果が違ってきます。
実際にクラスとオブジェクトのサンプルを通してオブジェクト指向プログラミングを体験してみましょう。
オブジェクト指向もいよいよ大詰めです。最後のテーマは継承(けいしょう)です。継承を用いると、あるクラスの機能を受け継いだ新しいクラスを定義することができます。
継承を使ったサンプルプログラムを実際に実行してみます。
機械学習やニューラルネットについて学習する前に、そもそも人工知能とは何かと言うことについて説明します。人工知能の簡単な歴史と、その問題点であるフレーム問題について説明します。
人工知能の限界と言われるフレーム問題について説明します。
かつてはこれによって、人工知能はこれ以上発展しないとされていました。
現在進行中の第三次AIブームとその内容について説明します。
この段階の最大の特徴は人工知能が実用化の段階に入り商用利用が盛んになっているということと、技術が飛躍的に発展したことが特徴です。
人工知能はそのレベルに応じて4つのレベル(考え方によって5つのレベル)に分類されます。
ここではどのような分類方法があるかと言うことと将来の課題について説明します。
チューリングテストとは人口知能の評価に使われるテスト方法です。
つい最近までこのテストに合格する人工知能は存在せず、無理だといわれてきましたが、近年、その常識を破る驚くべき事件が起こりました。
2,045年を境にAIと人間の立場が逆転する…それがシンギュラリティといわれる問題です。
果たしてそのようなことは起こるのでしょうか?
機械学習と言うキーワードは近頃あちこちで聞かれるようになりました。しかし、果たしてそれはどういうものなのか、理解できる人は意外と少ないのです。
機械学習の一つである教師あり学習について学習します。供し有り学習は大きく分けて回帰問題(かいきもんだい)と分類問題(ぶんるいもんだい)に分けられます。
機械学習のうち教師なし学習と強化学習について説明します。
機械学習の有力な手段であるニューラルネットワーク(neural network)について説明します。
ニューラルネットは脳の仕組みを模倣したものであり、起源は1943年の人工ニューロンにさかのぼります。
ヘッブの学習則をもとに考えられたパーセプトロンは、人工ニューロンを2層にしたもので、人工ニューロンの考え方を改良したものです。
多くの問題を解決することができますが、解決できるもんだはあくまでも線形問題だけと言う制限があります。
パーセプトロンは多くの問題を解決することができますが、解決できる問題はあくまでも線形問題だけと言う制限があります。
この制限を克服することによってニューラルネットワークが生まれていく過程も同時に説明します。
パーセプトロンを多層化することにより作られたニューラルネットワークの概念とその関連用語、さらには使用例を説明します。
単純な2層のパーセプトロンの問題点を克服することに成功したのが誤差伝播法(バックプロパゲーション)と呼ばれる方法です。
誤差伝播法では、入力のフローとは逆方向に誤差を修正するための信号を送り重みを調整してより正確な処理ができるようにします。
いよいよニューラルネットワークを使ったアルゴリズムである深層学習(DeepLearning)について説明します。なぜこの方法が機械学習の手法の中で最も強力なのか、そしてどのような仕組みになっているかについて説明します。
ディープラーニングの一つであるCNN(Convolutional Neural Network)とRNN(Recurrent Neural Network)について説明します。
ここから本格的にニューラルネットをはじめとする機械学習のプログラミングに入ります。まずは環境構築が必要なので、そこで必要となる環境構築全般について説明します。
学習環境として使用するJupterNotebookの使い方を説明します。
JupyterNotebookの使い方の説明の後半です。
ベクトルの概念とnumpyで利用する方法についての概要について説明します。
numpyを使って実際にベクトルの演算を試してみます。
numpyを用いて行列演算を行う方法について説明します。
実際にnumpyを使って行列の計算をやってみます。行列同士の演算、ベクトルと行列の演算の処理方法について説明します。
matplotlibはnumpyでグラフを出力するためのライブラリです。ここではライブラリの簡単な使い方と、サンプルを説明します。
実際にmatplotlibを使ってグラフを出力するサンプルを紹介します。実際に入力して実行してみましょう。
ニューラルネットワークで用いる活性化関数(かっせいかかんすう)を紹介します。活性化関数には様々な種類が有りますが、主要なものを取り上げその性質について説明します。
matplotlibを用いて実際に活性化関数を描画してみます。プログラムを通して関数の性質を理解しましょう。
ニューラルネットを記述する数学的な基礎の説明は一通り終了しました。ここからは、実際にパーセプトロンをPythonのみでプログラミングをしてみます。パーセプトロンはニューラルネットの基本の基本です。まずはここから基本的なニューラルネットのプログラムの仕組みを学びましょう。
パーセプトロンのプログラムを実際に自分で実装してみます。
プログラムの中身の詳細を解説します。
パーセプトロンの限界と線形非分離問題について説明します。
その限界を克服するために多層ニューラルネットワークが必要な理由も説明します。
次はPythonで多層ニューラルネットを構築する方法について説明します。
多層ニューラルネットはパーセプトロンよりも複雑ですが、頑張って学習してみてください。
多層ニューラルネットをPythonのみで実装します。
コードの簡単な説明をしています。
ニューラルネットワークはパーセプトロンよりも便利ですが、過学習(かがくしゅう)と局所解(きょくしょかい)に陥る可能性があります。
Tensorflow+Kerasを学ぶ手始めとして線形分離可能な問題をパーセプトロンで解決することにチャレンジします。
手始めに線形分離可能なダミーデータの作成方法について説明します。
ダミーデータの分類問題を解決するための単純パーセプトロンをTensorflow+Kerasで実装する方法を通してパーセプトロンを実装する方法について学習します。
パーセプトロンを通して分類問題の学習と評価の方法について学習します。
Tensorflow+Kerasで実際にダミーのデータを使った分類問題にチャレンジします。
続いて三層ニューラルネットワークを実装する方法について説明します。
線形分類不可能なダミーデータを作成し、そのような問題でも多層ニューラルネットワークであれば解けることを説明します。
アヤメのデータを元に学習モデルを構築します。前150個のデータのうち、120個を学習用に、30個をテスト用に分けます。
ニューラルネットワークを用いた多値分類のサンプルとしてアヤメの分類を取り上げます。
最初にアヤメのデータの概要について説明します。
アヤメの分類を行う多値分類のニューラルネットワークの実装方法について説明します。
実際に学習とテストをやってみます。プログラムを動かしながら実際に学習とテストをやってみます。
0~9の手書きの数値データを分類するためのパーセプトロンとニューラルネットワークを実装します。
手始めに学習用の手書きの数値データであるMNISTについて説明します。
MNISTの手書きの数値データを分類するためのパーセプトロンとニューラルネットワークの実装方法を説明します。
実際にMNISTの数値の分類を行うサンプルを実行してみます。
実際にTensorflow + Kerasを用いたMINST学習のためのCNNの構築のサンプルを見てみます。
手始めにCNNの構造の概要についついて説明します。
CNNがどのように学習を行うかについて説明します。
Tensorflow+KerasでCNNを実装する方法について説明します。
Tensorflow+KerasでCNNを実装してみます。
実用的な深層学習を行うにはGPUが必要となります。
GPGPUの概要とTensorflowの関係性について説明します。
最後まで学習お疲れ様でした!
ここまでで深層学習やニューラルネットの学習の基本です。本当の学びはこれから始まります。
皆さんの検討をお祈りします。
近頃話題の人工知能(じんこうちのう)や深層学習(しんそうがくしゅう)について興味があり、仕事や学習に活かしたい、そう考えている学生や社会人のためのやさしい入門講座です。
「今流行の深層学習や、Python言語を勉強したい」
と思って挫折した経験はありませんか?
実際に専門書を開いてみると難しい専門用語や数式が羅列されて、「とても自分には理解できない」と諦めた人も少なくないのではないでしょうか。
しかし、プログラミングの経験が無くても、数学的知識が無くても心配要りません。
専門の研究者やデータサイエンティストにでもなるのならともかく、人工知能や深層学習のプログラミングは、高校レベルの数学知識で十分間に合うからです。
あとは、パソコンを操作できる知識があれば十分です。
学習終了後には、Python言語のプログラミングスキルと、人工知能プログラミングが身につけられます。
扱う分野は
・CNN
・RNN
・機械学習
・AI(人工知能)
です。これらについて学習したいかた、もしくは一度学習しようとして挫折してしまったかた。ぜひこの講座でトライしてください!