
この講座の概要について説明します。
初心者の方はこのコースの全過程を学ぶことにより、プログラミングや難しい数学の知識がなくても深層学習について学ぶことができます。またすでに知識のあるかた、上級者にとっては、人工知能のプログラミングや学習システムの開発支援ツールとしてソニーのニューラルネットワークコンソールを役立てる方法について学習することが可能です。
この講座で使用するソニーのニューラルネットワークコンソール(NNC)とはどのようなツールかということを簡単に説明します。
無料で利用可能であり、かつ初心者からプロまで幅広く利用できるこのツールの奥深さについて説明します。
ニューラルネットワークコンソールには、Windows版とクラウド版があり、ダウンロードおよび登録には、以下のソニー・ニューラルネットワークコンソールのHPにアクセスする必要があります。
■ SONY-NNCホームページ
https://dl.sony.com/ja/
この講座は初心者から上級者まで様々なレベルの方が学習できます。
それぞれのレベルに応じて得られる成果、学習のヒントについて解説します。
このコースの各セクションの概要について説明します。
現在進行中の第三次AIブームとは何かについて説明します。現在は過去二回の違いと、その成功要因について説明します。
第三次AIブームの中心技術である機械学習について説明します。
機械学習の考え方は、人間がコンピュータに学習させるのではなく、コンピュータに自律的に学習させるという考え方です。
その考え方は大きく分けて「教師あり学習」、「教師なし学習」、「強化学習」の三種類があります。
機械学習の中でも主要な技術であるニューラルネットワーク(Neural Network)の概要について説明します。
ニューラルネットワークは人間の脳の仕組みを模倣したもので、深層学習の根幹をなす技術でもあります。
第三次AIブームのきっかけとなり、Alpha Goや自動車の自動運転技術などに用いられている深層学習について説明します。
深層学習はニューラルネットワークの欠点を改良した革新的な技術で、CNNやRNNなど様々な実装方法が存在します。
機械学習や深層学習は通常Python言語を用いて記述されたシステム上で実行されます。
しかし、そのほかにもR言語や、C/C++言語などの言語がそれぞれの特徴に応じて用いられます。
ニューラルネットワークや深層学習のプログラミングを行う際に必要となるのはプログラミング言語ばかりではなく、その言語で利用できるライブラリと呼ばれる専用の小規模なプログラムの集まりです。
代表的なものとしてはTensorflowやKerasといったものが存在しますが、そのほかにも目的に応じて使い分けられる様々なライブラリが存在します。
また、深層学習は大量の計算を行わなくてはならないことから高速な演算を支援するGPUやFPGAなどを利用できるライブラリもそろっています。
NNCを使う前にあらためてNNCとは何かを詳しく説明します。
機能の概要とWindows版、クラウド版との違いについても説明します。
NNCのアプリ版を利用する方法について説明します。
アプリ版は、NNCのホームページからダウンロード可能で、Windows8.1/10の64ビット版で利用可能です。
ただし、インストールするタイプではなく、.exeファイルを含んだフォルダをダウンロードして、ローカルの適切な場所において利用します。
また、VisualC++2015再頒布可能パッケージをあらかじめインストールする必要がありますので、忘れないようにしてください。
Windows版のNNCのGUIの構成について説明します。
・プロジェクトの管理
・ニューラルネットワークの編集
・データセットの内容
・学習
・評価
のGUIについてになります。
操作方法がやや異なるものの、クラウド版も基本の構成に変わりはありません。
実際に一番簡単なプロジェクトである、01_logistic_regressionを実際に実行してみることにより、NNCの基本的な使い方を説明します。
このプロジェクトは手書きの画像データのデータセットであるMNISTを使用するため使用するにはまずデータをダウンロードするところから始める必要があります。
まとめとして、復習も兼ねてNNCの基本機能について流れを順に説明していきます。
今後様々なニューラルネットワークを構築・編集していく際の基本となります。
ニューラルネットワークの解を求めるうえで大事な要素である損失関数について説明します。
損失関数には大きく分けて二乗誤差、交差エントロピーがあります。
回帰問題には二乗誤差、分類問題には交差エントロピーを用います。
深層学習やニューラルネットわーこうのサンプルとしてしばしば用いられるデータセットMNISTについて説明します。
MNISTはフリーで入手可能な0から9の手書きの数字とそのラベルの組み合わせのデータセットです。
学習用に6万、評価用に1万のデータが存在します。
学習の効果を視覚的に確認できる上にデータ量も少ないことから、学習用によく用いられるデータセットです。
MNISTを使用したプロジェクトである01_logistic_regressionについて改めて解説します。
4と9の画像を区別するプロジェクトがどのような仕組みになっているかを説明します。
サンプルの起動結果と、学習の評価を確認する方法について説明します。
ニューラルネットワークで用いる指標である混合行列、F値、分類精度といったパラメータについての説明をします。
これらのパラメータは、学習の結果を表関する重要な指標となります。
NNCでは評価結果をCSVファイル形式で保存することができます。
ここではデータの保存方法と、その内容について解説します。
ニューラルネットワークの誤差伝播法の重みの更新は、誤差が最小化されるまで続きます。
この手法のことを勾配降下法(こうばいこうかほう)と言います。
NNCを用いて新たにプロジェクトを作成する方法から、レイヤーを新規に追加する方法までを説明します。
また、操作した際に不要になったレイヤーはDELキーで消去したり、操作を間違った場合、Undo、Redo機能が使用できるということについて説明します。
レイヤーのプロパティの情報の見方や操作方法について説明します。
複数のレイヤーを追加しニューラルネットワークを構築する方法について説明します。
より効率的なレイヤー構築の方法について説明します。
Actionボタンを押すと、さらに細かい操作が可能になります。
特に便利な機能はArrange Layerで、作成中のニューラルネットワークを整理することができます。
NNCは、ニューラルネットワーク編集時にWindowsアプリ一般と同様のショートカットキーを利用することが可能です。
主なものを挙げると以下のようになります。
・CTRL + C … コピー
・CTRL + X … 切り取り(カット)
・CTRL + V … 貼り付け
・CTRL + Z … Undo
・CTRL + Y … Redo
まずは一からプロジェクトを作成し、ニューラルネットワークを構成するレイヤーを配置します。
作成したプロジェクトはなくならないように保存をします。
レイヤーを追加しただけではニューラルネットワークは完成しません。
追加したレイヤーのパラメーターを調整し、ニューラルネットワークを完成させます。
ニューラルネットワークが完成したら、次は学習用・評価用のデータをセットします。
共にcsv形式で保存されており、対応する画像ファイルとラベルの関係性を記述してあります。
最後に作成したプロジェクトの学習と評価を行います。
実行結果が思わしくない場合はもう一度最初からやり直してみてください。
活性化関数について説明します。
すでに何度か出てきた活性化関数ですが、様々な種類があります。数式などを理解する必要はありませんが、だいたいの形や性質などを覚えておくと大変便利です。
このプロジェクトでニューラルネットワークを構成するレイヤーの構成について説明します。
実際のニューラルネットワークの構造と、レイヤーの構造は微妙に違うところがあるので注意が必要です。
NNCでニューラルネットワークを構成するうえで最も基本的で重要なレイヤーであるInputレイヤーの概要について説明します。
ニューラルネットワークの重みを構成するAffineレイヤーについて説明します。
AffineレイヤーはInputレイヤーと並んで最も基本的で大事なレイヤーの一つです。
活性化関数の一つであるSigmoid関数の役割をになるSigmoidレイヤーについて説明します。
活性化関数のレイヤーとしてはこのほかにTanhやSoftmax、ReLuなどがあります。
ニューラルネットワークの出力層にあたり、かつ損失関数の一つである交差エントロピー誤差を得ることができるBinrayCrossEntropyレイヤーについて説明します。
オリジナルプロジェクトの第2弾として、「アヤメの分類」を作成します。
そもそも、アヤメの分類とはどのようなものかをまず説明します。
アヤメの分類のニューラルネットワークを生成します。入力層4つ、出力層3つの非常に単純なニューラルネットワークで簡単にアヤメの分類を行うことができます。
作成したニューラルネットワークで実際に学習と評価を行います。
データ数が少ないのであっという間に処理は終了します。
学習用データ:iris_flower_dataset_training_sdeepy.csv
評価用データ:iris_flower_dataset_validation_sdeepy.csv
作成したプロジェクトを改良します。
元のプロジェクトは、出力を0か1かの3つのバイナリ値で表現したデータセットを用いていました。
しかしここでは、アヤメの分類を0~2という整数値で設定したデータセットを用いることができるようにプロジェクトを改良します。
学習用データ:iris_flower_dataset_training_delo.csv
評価用データ:iris_flower_dataset_validation_delo.csv
MNISTのデータを利用した0~9の判別のプロジェクトについて説明します。入り口はMNISTの画像である784ピクセルであることにはかわりありませんが、アウトプットは0~9の値が扱えるように10個必要になります。
また、中間層を設けることによりより精度の高い分類ができるように工夫をしています。
実際にMNISTの0から9の数値の判定を行うプロジェクトを作成します。
4と9の区別の時と違いかなりニューラルネットワークは複雑になります。
データセットの設定について説明します。CategorycalCrossEntropyレイヤーを用いることにより、データセットの形式がバイナリ形式でなくてもきちんと処理ができるようになっています。
ニューラルネットワークが完成したら学習と評価を行います。
これでプロジェクトは完成です。
プロジェクト全般の設定を行うCONFIGタブについて説明します。
CONFIGタブはプロジェクト全般の設定を行うタブで、5種類の設定項目が存在します。
Global Configはプロジェクト全体の諸設定やパラメータの決定などを行います。
学習を行う世代数やバッチサイズ、モニター間隔などを決定します。
CONFIGタグのうち、Optimizerについて説明します。
ニューラルネットワークの最適化に関する設定項目です。
CONFIGタグのうち、MONITORについて説明します。
モニターを行う世代を設定する定項目です。
CONFIGタグのうち、Executorについて説明します。
評価の実行方法についての諸設定です。
深層学習の一つである自己符号化について説明します。
自己符号化は回帰問題の一種であり、純粋な特徴量を自動抽出するのに用いられます。
実際に自己符号化のサンプルプロジェクトを動かしてその動作を確認します。
プロジェクトは、
neural_network_console_120\samples\sample_project\tutorial\basics
にある
06_auto_encoder.sdcproj
を用います。4と9の画像の自己符号化を行うサンプルです。
実行結果をファイルを見て確認します。
プロジェクトと同じく
neural_network_console_120\samples\sample_project\tutorial\basics
にある、
06_auto_encoder.files
フォルダを確認してください。この中にある
日付のフォルダが、学習結果のフォルダであり、更にその中の
0_0000
フォルダが出力画像です。
また、その内容は
output_result.csv
ファイルの中に入っています。
自己符号化の応用技術について説明します。
自己符号化の応用技術には
デノイジング・オートエンコーダ
スパース・オートエンコーダ
スタックド・オートエンコーダ
といったようなものがあります。
この講座は深層学習(Deep Learning:ディープラーニング)を
SONYのニューラルネットワークコンソール(以下NNC)を使ってを学ぶ講座です。
NNCの最大の特徴は、プログラミングの知識がなくても容易にまた、
無料で本格的な深層学習のシステムを構築することが出来る極めて画期的なツールであることです。
どのくらい手軽かというと、NNCはすでにPython言語などで実装された深層学習のデータを読み取ったり、
逆にNNCで作成した学習データをPython言語やC++言語でも容易に利用できるようになっています。
そのため入門者だけではなく、本格的に業務などでAIや機械学習のシステムを構築・運用している人にとっても
プロトタイピングやシステム設計などの時間と手間が節約できる大変役立つツールになっています。
第三次AIブームの今、各業界で注目を浴びているこの技術を難しい数式や本格的プログラミング抜きで学んでみませんか?
また、このコースを終えると以下のようなスキルが身につきます。
ニューラルネットワークの基礎
深層学習とは何か、根本的な理解
自己符号化(Auto Encoder)
畳み込みニューラルネットワーク(CNN:Convolutional Neural Network) を使って画像の分類・解析ができる
再帰型ニューラルネットワーク:(RNN:Recurrent Neural Network) による時系列のある深層学習の実装方法が身につく
そのため本講座で対象となる受講者は以下の通りです。
深層学習に興味があるが数学やプログラミングの知識がない
本で深層学習を学ぼうとしたが書籍が難しすぎて挫折した
すでにPython言語などで深層学習を実装しているが作業をより効率化させたい
本コースはこのような入門者をターゲットに作成されていますが、すでに深層学習を学びPython言語などでシステムを作っているが、
より効率的なシステム開発を行いたい上級者にも満足して学んでもらえる内容になっています。