2019年09月一覧

人工知能技術の概要③

こんばんは。
今日も本書の内容について記載します。

ディープラーニングは人工知能技術のブレークスルー

~機械学習~

 第1次、第2次とブームが過ぎ去った後、ウェブの登場により、再びAIブームが訪れた。第3次AIブームの中で中心となった技術のひとつが「機械学習」。「機械学習」とは人工知能のプログラム自身が学習する仕組みである。ここでいう学習とは「分ける」という処理であり、「分ける」作業はすなわち、ある事象について判断しているといういことである。「機械学習」には大きく「教師あり学習」と「教師なし学習」に分けられる。

・教師あり学習
入力と正しい出力(分け方)がセットになった訓練データをあらかじめ用意して、ある入力が与えられたときに、正しい出力(分け方)ができるようにコンピュータに学習させる。

・教師なし学習
入力用のデータのみを与え、データに内在する構造をつかむために用いられる。データの中にある一定のパターンやルールを抽出することが目的。

機械学習の代表的な分類の仕方

①最近傍法
線を引くよりももっと素朴な方法で、文字通り「一番近い隣を使う」ことであり、一番近いデータのカテゴリーが当てはまる確率が高いはずだという仮説に基づいている。

②ナイーブベイズ法
確率に関する有名な定理である「ベイズの定理」を使って分ける方法で、データの特徴ごとにどのカテゴリに当てはめるのかを足し合わせていく。

③決定木
ある属性がある値に入っているかどうかで線引きする。複数の属性を組み合わせた条件をつくることができない。

④サポートベクターマシン
マージン(余白)を最大にするように分ける。精度は高く、よく用いられているが、大きなデータを対象としたときは計算に時間がかかってしまうという欠点がある。

⑤ニューラルネットワーク
上記①~④のように純粋に機械学習の分けるという「機能」をエレガントな方法で実現しようとしているのに対し、人間の脳神経回路をまねすることによって分けようというもの。学習する過程で重みづけを変化させ、最適な値を出力するように調整することで、精度を高めていく。

 

~ディープラーニング~

 ディープラーニングは人間が特徴量を設計するのではなく、コンピュータが自ら高次の特徴量を獲得する。第1次、第2次AIブーム、そして機械学習は人工知能の黎明期(約1960年)からの最初の10年~20年の間に技術基盤が出来ていた。しかし、ディープラーニングに代表される「特徴表現学習」は黎明期の革新的な発見・発明に匹敵するような大発明である。特徴表現をコンピュータ自ら作り出すことはそれくらい大きな飛躍。とはいえ、ディープラーニングによって人工知能が実現するというのは短絡的すぎる考えである。

 ディープラーニングとは多階層のニューラルネットワークであり、機械学習のニューラルネットワークを発展させた技術。従来の機械学習と大きく異なる点が2つあり、1つは1層ずつ階層ごとに学習していく点、もう1つは自己符号化器という情報圧縮器を用いること。

 実際ディープラーニングのアイデアに近いものは昔からある。しかし、得られる特徴量や概念の頑健性の構築にはマシンパワーが必要であり、10年以上前のマシンパワーでは実現困難であった。しかし、現在の飛躍的に高まったマシンパワーによってニューラルネットワークを多段にして、高次の特徴量を得ることが可能になってきたのである。

~以下、感想~

 私はディープラーニングは機械学習の中のひとつの技術だと思っておりましたが、本書では機械学習とディープラーニングの違いとディープラーニングのすごさについてとても詳しく書いてあり、勉強になりました。

しかし、現在世間をにぎわせているディープラーニングの技術自体も昔に考えられていて、マシンパワー不足から実現できずにいたということで、やっと時代が技術に追いついてきたということですね。いろいろな分野の技術が上がり、過去の技術が生きてくるということは今後もたくさんありそうですね。これは歴史を勉強すればいいアイデアが眠っているかもしれませんね・・・

まぁアイデア云々の前にひとまずは機械学習とディープラーニングを使いこなせるようにならないとですね・・・
機械学習の中でもいろいろな分け方があり、それぞれ適した使い方があるのでしょう。その辺勉強して使いこなせるようになりたいですね。

次回も本書の内容について書いていきたいと思います。


人工知能技術の概要②

こんばんは。

「人工知能は人間を超えるか ディープラーニングの先にあるもの」を読み進めております。

前回の記事でパラパラ読みした際に気になった点について、記載していこうと思います。

人工知能には過去2回のブームがあった。

~第1次AIブーム~

 1950年代後半~1960年代に第1次AIブームが起きた。この時代では主に「推論」「探索」の技術が中心となっていた。一見すると知的に見えるさまざまな課題をコンピュータが解決していったが、冷静に考えると非常に限定された状況でしか問題が解けなかった。迷路を解いたり、パズルを解いたり、チェスや将棋など明確に定義されたルールの中で戦うものならともかく、現実のもっとずっと複雑な問題は解けなかった。人間の知能の体現をコンピュータで実現することの奥深さがわかったのが、第1次AIブームであった。

~第2次AIブーム~

 1980年代になると推論・探索のシンプルなルールで人工知能を実現しようとした第1次ブームとは異なり、「知識」に着目した第2次AIブームが勢い出してきた。「病気に関するたくさんの知識」をコンピュータに入れておけば医者の代わりに、「法律に関するたくさんの知識」を入れておけば弁護士の代わりになるというように現実の問題を解く実用的な「エキスパートシステム」が中心となった。「エキスパートシステム」ではうまくいく例もあったが、問題もあった。それは専門家から知識を取り出さなければならないこと、また覚えさせなければならない知識の量、常識レベルの知識の表現であった。「知識」を扱うさまざまな研究がなされる中で出てくる山積みの問題に対し、「結局AIは夢物語なのかもしれない」と悲観的な観測が広がり、第2次AIブームは終わりを迎えた。

~以下、感想~

そして現在、機械学習、ディープラーニングを中心に第3次AIブームを迎えているわけですね。

1960年というと今からおよそ50年前ですか・・・そんな時代から人工知能を作ろうとしていたのですね。頭のいい技術者達が50年かけても実現できていないとは・・・

そそるぜこれは・・・w

過去の偉人たちの残してきてくれた研究結果や情報を今の時代の人たちはインターネットの力で確認できるわけですよね。ITの大企業は集の力で人工知能技術を高めているのでしょうが、個の力でも十分に戦える環境はあるわけですよ!

この本読んでいて理解できない理論や文言もたくさん出てきますが、まぁそれはいずれ理解できるようになるでしょう。諦めずに勉強を続けていれば。

次回も本書で気になった点について書いていこうと思います。


人工知能技術の概要①

こんばんは。

Pythonの基礎学習を終えたので、以下のサイトの学習ロードマップ通り、これから人工知能について学習していきたいと思います。

追記 Pythonや機械学習がオンライン上で学べるAI Academyをnoteでも書きましたが、3/17日からほとんどのコンテンツを永続的に無料で利用できるよう致しましたので、是非この記事と合わせて使って頂けますと幸いです! ...

人工知能のプログラミング学習を始める前にまずは人工知能の概要を学ばなくてはならないということで、上記のサイトでおすすめされている本を買ってきました。

まだパラパラとしか読めていないのですが、本書は著者自身が人工知能開発に人生をかけているということで、すごく説得力がありそうです。

パラパラ読みで気になった点を記載しておきます。

  • 人工知能には過去2回のブームがあった。
  • ディープラーニングは人工知能技術のブレークスルー
  • 機械学習は結構前からある
  • 人工知能はいうほど全然できていない

人工知能技術の歴史から現在の到達レベルまで学べそうなので、しっかりと本書で人工知能の概要を勉強したいと思います。


Python基礎学習③

こんばんは。

本書にてライブラリとクラスについて学び終わりました。

まずクラスについてですが、C++と違ってprivateなメンバ変数というのが厳密にはないというのに驚きました。

変数の前にアンダースコアを2つ付ければ、private変数ということにする等、クラスのカプセル化を運用で回避というのが、C++とはすごく違うなと。
C++はこういった定義は厳密にされていたので、この辺はC++の考え方がしっくりきますね。運用で回避というのは間違いが起きる元ですもんね。

しかしPythonではPEP8というコーディング規約の考え方がプログラマーの方やIDEにもしっかりと浸透しているみたいなので、問題ないのかな?この辺もまたC++のコーディングの仕方がプログラマーそれぞれで違うという自由な感じと違うところですね。

クラスの継承については「子クラス(親クラス)」で記述がすむので、分かりやすくていいなと思いました。C++は継承もprivateなのかpublicなのかprotectedなのか、どう継承するか選べますもんね。

なんでも自由に細かく決めれるC++はやはり上級者向けだったのですね。
私もいずれはC++を使いこなせるようになりたいものです!

 

ライブラリについては最高によく出来た仕組みだなと感じました!

C/C++でいうとこの#includeみたいなノリなのでしょうけど、いろいろな種類のライブラリが気軽に使えてなんと便利なことでしょう。

GUIのプログラムを作るならこのライブラリ、Webアプリを作るならこのライブラリ、画像処理するならこのライブラリとなんでもあるし、使い方も簡単だし、すごいです!

C++でもこういうライブラリ群が気軽に使えればいいのにねー。

ライブラリをインストールする方法もIDEのコンソール画面で「pip install ライブラリ名」で勝手に取ってきてくれるし、すごく楽ですね!

ちなみにC++でプログラムを作っていたときにはまった時間取得もPythonの時間ライブラリで簡単に取得できました。

Pythonは簡単だけど、本格的なプログラミングも可能というのはこのライブラリが豊富にあることと使いやすいということが支えているんですね。

さて、ひとまずPythonの基礎的な文法や仕様について学習し終えました。
PythonにはポインタやテンプレートやSTLがなかったり、C/C++より細かい部分の覚えることが少なくて、基本的なことだけでいえばぼちぼちやっても2週間くらいで学習を終えれました。

Pythonでは作りたいアプリは大概作れることを知りましたが、私としては人工知能を作りたいということで、当初の道筋通り進んでいきたいと思います。


Python基礎学習②

こんばんは。

前回print()関数を使って画面に出力するところまでいきました。

そこからさくさくと本書の学習を進め、データ型の基本、制御構文、関数の作り方まで進みました。

データ型にはC/C++になかったタプル型やら辞書型など見慣れぬ単語がありましたが、全体的にはC/C++の型より圧倒的に少ないなという印象を受けました。

C/C++では数値の型だけでもint ,short int,long int,unsigned int 等々まだまだたくさんありましたが、Pythonではint,float,あと複素数型の3つのみとのこと。(複素数型は紹介だけで、解説はされてなかったです)。

C/C++みたいに各型のバイト数までは載っていなかったので、細かいことは気にするなということでしょうか。
それにしても選択肢が少ないのは初学者にとってはいいことですね!
C/C++の型は何を使うのが最適なのか多すぎて分からないですもの・・・

制御構文についてはif-else文、for文、while文とそこまで変わりはないっぽいですね。あ、elif文という見慣れぬものはありましたね。
ifとelseの条件の中間という立場の文ですのでそこまで変わったものではなかったです。

関数についてはC++のクラスのメンバ関数みたいだなといった印象を受けました。普通の関数にデフォルト引数を設定できるのと、通常の自分で定義した変数で「変数.関数()」の形で使えるのでそう思いました。

Pythonデータ型定義や関数定義はどちらかというとC++のクラスの考え方で作られているのかな?
例でいうとPythonのstr型はC++のstringクラス、Pythonのリスト型はC++のvectorクラスみたいなね。

まぁなんにせよ、C/C++学習のときは関数定義のところで躓いていましたが、Python学習では難なく理解することができました。

この調子で進んでいくぞ~。

 


Python基礎学習①

おはようございます。

初めて朝にブログを書く気がします。
5時起きを目指していつも起きるのですが、大体6時くらいになってしまいます。

今日はなぜか4時に目が覚めたのでそのまま起きて朝から勉強し、ひと段落着いたので、ブログ更新します。

Pythonの基礎的な文法等学ぶ為にはまず環境作りから入らなければなりません。

先日買った参考書でも環境作りについて紹介されていました。

しかし、Webで調べてみるとPythonのIDEで最優良なのは「PyCharm」との情報が多数ありました。

どうせ使うなら最優良のものがいいので、「PyCharm」を使うことにしました。

【Python入門】PyCharmが最強おすすめのIDEだ!

こちらの記事を参考にインストールしました。
この記事通りにすると日本語化にもできたので、おすすめです。

またライブラリパッケージとして「Anaconda」というものもWebでの評価が高かった為、インストールしてみました。

これで環境は整いましたので、早速使用してみました。

VisualStudioと似通った感じですが、VisualStudioとは違ってコンパイル方法も分かりやすく、またコンパイル結果も下部にぱぱっと表示され、今のところは使いやすいなといった印象です。

ひとまず、最初に習う文法としては文字の出力ということで「HelloWorld」を出力してみましたが、すごく簡単ですね。

print()だけでいいんですね。

C/C++は#includeやらmain関数やら書いた後にprint関数で出力でしたので、手間が全然違う。

Pythonはプログラミング入門に最適な言語というのをどこかの記事で見ましたが、こういう文法的なところが簡単ということなんですかね。

結局ある程度のレベルまでいったらプログラムの組み方等に悩むことになるので簡単なのは最初だけでしょうね・・・(笑)

しかし、こんな感じでほかの文法も簡単なコードでいいのであれば、文法間違いに悩まずコーディングに集中できそうですね!

C/C++の文法はある程度理解しているはずなので、これほど簡単な文法ならばさくさく学習が進みそうです。

さくさく進めていきます!


Pythonを始めてみた

こんばんは。

先日、子供と「Scratch」をしたことで、「C/C++」以外の言語に興味がわきました。

そして「C/C++」以外で兼ねてから興味を持っていたプログラミング言語
「Python」を始めてみることにしました。

このブログのテーマでもある人工知能作りですが、今人工知能やAIプログラミングで流行っている言語がこの「Python」
私はその流行りに乗らずに「C/C++」を学習していたのですが、どうも人工知能作りにまで発展しそうにないので、「C/C++」での人工知能作りはいったん諦めます。

その代わり人工知能作りの情報や書籍が豊富にある「Python」で再度チャレンジしていきたいと思っています!

早速入門書を買ってきました。

ひとまずは本書で「Python」の言語の仕様を学ぶとして、そこから先をどのように学習していくかが重要ですね。

「C/C++」を勉強していたときは言語仕様をさらりと学んだあと、人工知能とは関係のないアプリの作成やら、再度言語仕様の学習をしたりと、まぁそれはそれは計画的な学習とはいかなかったので、今回はその反省を生かし、ある程度は計画的に順序立てて学習していきたいと思っています。

そこで情報豊富なことを利用し、いろいろと調べてみたところ、以下のサイトの学習の仕方が理に適っていそうでした。

追記 Pythonや機械学習がオンライン上で学べるAI Academyをnoteでも書きましたが、3/17日からほとんどのコンテンツを永続的に無料で利用できるよう致しましたので、是非この記事と合わせて使って頂けますと幸いです! ...

こちらの記事を書いた方は
「AI Academy」
https://aiacademy.jp/
というAIプログラミングの学習サイトを運営しているとのことで、このサービスも並行して利用しつつ(もちろん無料版でw)学習を進めていきたいと思います。

少しばかり本サイトを利用してみましたが、学習コンテンツがすごく豊富でこの全てを吸収すればこのサイトだけでAIプログラマーになれそうな感じです。

私は覚えが悪いので、書籍とWebのさまざまな情報も利用しつつ学習をしていきます(笑)

「C/C++」の学習も楽しんでいましたが、「C/C++」だけでは人工知能作成という目標があまりにも遠すぎると感じていましたので、これからの「Python」学習で気持ち新たに頑張り、そして楽しんで目標に向かっていきたいと思います!


Scratchを試してみた②

こんばんは。

Scratchを使って子供と簡単なプログラミングをしておりましたが、サンプルプログラムを完成させました。

子供からしたら慣れないマウス操作に苦労していましたが、最後まで諦めずに完成できました。

子供も「次は何作るの!?」と飽きた感じではなさそうでしたので、また別のサンプルプログラムでも一緒に作ってみようと思います。

この調子で子供にプログラミング勉強をさせていけば、将来有望な人材になりそうですなw

私も負けじとがんばらなければ。


Scratchを試してみた

こんばんは。

テレビ番組やネットニュースを見ていると、多々目にする。子供のプログラミング必修化。

私は現在独学でプログラミングを学び中ですが、私の子供(6歳)もいずれ学ばなければならないわけです。

いずれ学ぶのであれば、今から覚えさせておけば役に立つのではないか!?
子供と一緒にプログラミングを勉強することで私の勉強にも役に立つのではないか!?

そんな考えが私の中で芽生えて、嫁さんに相談してみたところ、「やらせてみれば?」とのこと!

そして子供に「やるか!?」と聞いたところ「やってみたい!」と言ったので、子供向けのプログラミング言語「Scratch」を試してみました。この言語の存在は前から知っていて、試してみたいと思っていたのです!

どうすれば「Scratch」が始められるのか調べたところ、Webサイト内で簡単に始められました。

私は「C/C++」から入ったので、プログラミングを始めるまでにすごく準備に時間がかかる印象を持っていましたが、「Scratch」は準備なしで始められるのに驚きました。

そしてとりあえず操作方法を見て、適当に操作してみましたが、ものすごく簡単にプログラムが組める。

あらかじめ用意されているブロックを組むだけで、キャラクターが動かせたり、繰り返し処理をしたり、なんと簡単にできること・・・

「C/C++」ではここまでいくのに何日かかったことやら・・・(笑)
今でもまともにここまでプログラム組む自信はない・・・!!!orz

しかしながら、簡単にプログラムは組めるとはいえ、子供と一緒にやっていくうえで、いきなり子供に「やれ!」って言ってもできないことは明白だし、私もばりばりプログラミングができるわけでもないし、教科書が必要だと感じました。

そこで「親子で学ぶ プログラミング超入門」という本を参考にしてみました。

こちらの参考書はその名の通り、昨今のプログラミング必修化に向けて親子でプログラミングを学ぶことを推奨している本です。

サンプルのゲームプログラムを一緒に作っていく過程で「Scratch」の使い方、プログラミングの考え方を学んでいこうという、子供にとってもやさしい一冊だと感じたので、こちらにしました。

多少「Scratch」の画面構成が変更にはなっていましたが、それほど大きく違いはなく、現状進められております。

しかし、私の理想ではマウスもキーボードも使わず、MyPC「Surface」のタッチパネルだけで「Scratch」をしたかったのですが、どうにもタッチでコード部分のドラッグ&ドロップができないみたいなので、仕方なくマウスを使っております。

私の子供もタッチパネルの操作ならある程度できるのですが、マウスは使ったことがなく、また手も小さいのですごくやり辛そうでした。タッチパネルで出来るようになってくれ~~~~

今回初めて「Scratch」を体験してみて、非常にプログラミングが楽しく感じられました。まぁ私はこれでも一応「C/C++」を1年以上勉強していますのでプログラミングの基本的なことは抑えている(と思っています)のでそう感じたのかもしれませんが、子供も分からないなりにゲームがひとつひとつ完成していく様子が楽しそうでした。

「C/C++」のようにプログラムを組む際のコーディングに時間がかからない分、プログラムの動きや制御のみに注力できるので、これはこれで自分の考えを体現するツールとして、今後も活用できそうです。

今まで「C/C++」しか興味はなかったのですが、「Scratch」に触れてみて、楽しかったこともあり、その他のプログラミング言語にも非常に興味がわきました。

またいつの日か、試してみようと思います。


スポンサーリンク
広告1
広告1