こんにちは。チャットの返信が単調過ぎて「AIと会話しているみたい」と言われたことがあるFa1(ふぁいち)です。
皆様は、「人工知能」や「AI」といった単語を聞いたときにどのようなものを想像されますでしょうか?
「人間に変わって仕事をしてくれる」
「機械が自分で判断をするもの」
などなど、様々な印象を持たれているかと思います。
そんなAIですが、「難しそう。自分で作るなんて無理。」とお思いではないでしょうか?
私もAIについて学ぶ以前はそのように思っていました。
しかし、意外にもAIは自分で作ることができてしまいます。
本記事ではAIの基礎的な内容とAI構築に用いるプログラミング言語についてを、説明させていただこうと思います。
目次
AIとは?
AIの定義
AIとは「Artificial Intelligence」の略で、日本語に訳すと「人工知能」です。実はAIの明確な定義は存在していないのですが、本記事では説明のために以下の定義を引用させていただきます。
大量の知識データに対して、高度な推論を的確に行うことを目指したもの
参考 | 一般社団法人 人工知能学会 定款
ポイントは、「大量のデータ」と「推論を的確に行う」の2点です。
AIや人工知能と聞くと、「人間と同じ知能を持ったシステム」や「感情を持ったシステム」といった解釈をされている方が多いように思います。おそらくSF映画等の印象が強いためだと思われますが、AIとは「大量のデータから推論を行う」ものであるという認識を忘れないようにしてください。
AIの歴史
AI(人工知能)の研究は1950年から続いており、現在までの3度のブームを迎えている。
出典:総務省「ICTの進化が雇用と働き方に及ぼす影響に関する調査研究」
各時代のブームと冬の時代を越えることで、AIはより複雑な問題を解決する能力を手にしていきます。そして、2010年代に入り、コンピュータはビッグデータと呼ばれている大量のデータから機械学習を行うようになりました。第三次人工知能ブームでは、機械学習の中でもより複雑な問題を高い精度で解くことができるようになったニューラルネットワークが誕生しました。
機械学習
機械学習とは、コンピューターが大量のデータを用いて、分類・予測などの与えれたタスクを遂行するアルゴリズムを自動的に構築する技術のことを指します。機械学習は先述の「AIの定義」を表したものであり、AIの中核的な技術とされています。ちなみに、ニューラルネットワークによる学習やディープラーニングも機械学習の一部です。
機械学習のおおまかな流れについて説明をしていきます
まずは大量のデータからの学習。下記図では、コンピュータは「果物」についてを学んでいます。
続いて、問題が出現します。今まで学んだことの無い「青いりんご」が出てきました。
この段階で、コンピュータは「推論」を行います。
そして答えを導き出します。
以上が非常に簡単な機械学習の説明になります
ニューラルネットワーク
続いてニューラルネットワークです。ニューラルネットワークは機械学習の一部です。
ニューラルネットワークは人間の脳神経回路を真似たアルゴリズムです。
人間の脳神経回路は、パーセプトロンという仕組みで学習を行います。パーセプトロンは、各ニューロン(a~f)が下記の図のように結合することで実現されます。入力層と出力層の間に中間層(隠れ層ともいう)が入ることで複雑な推論も行うことができます。下記のようなネットワーク構造をニューラルネットワークと呼びます。
上記のネットワークから得られる出力値fは以下のように求められます。
上式中のwは各ニューロンの重みを意味しており、活性化関数f(x)は様々な種類があります。
すなわち、非常に簡単に言ってしまうと、ニューラルネットワークでの学習は重みの調整をコンピュータが自動的に行うことによって実現されます。
その計算や、各層のニューロンの数や活性化関数の設定等はプログラミングで指定をすることが可能です。
AIの実現には、ニューラルネットワークでの機械学習がほぼ必須であり、ニューラルネットワークをプログラミングで実現することができれば個人でもAIをつくることが可能です。
AIを実装できるプログラミング言語は?
ニューラルネットワークを比較的簡単に構成することができる代表的なプログラミング言語は、下記の通りです。
- Python
- 情報が豊富
- 機械学習用のライブラリが充実
- R言語
- 統計・データ解析に使用されている
- 比較的容易に機械学習のプログラム記述が可能
- C++
- C言語ベースの汎用性が高い言語
- 実行速度が早いが、機械学習用の情報は少なめ
上記が、AIを構成する際のおすすめプログラミング言語となります。
すでに使用されている言語が上記内にあれば、そちらを継続してご使用いただき、機械学習用のライブラリを追加でインポートいただくのが良いかと思います。
言語をイチから選定して、AIについても学習を進められたいということであれば、Pythonをおすすめ致します。
Pythonは世界的にも広く使用されている言語であるため、情報が豊富です。加えて、PythonはAIのみに特化している言語ではなく、Webアプリケーションの作成等も可能な言語ですので、AI以外の開発にも用いることが可能です。これらの理由から、もしイチから学ばれるということであれば、Pythonをお選びいただくことをおすすめ致します。
AIプログラミング学習の手順
ここからは、初めてAIを学ばれる方がどのように学習を進めていくべきなのかについて説明をしていきます。
- 数学
- AIを構成するものは数学
- 特に微積分・線形代数(ニューラルネットワークの構成に必要)
- ニューラルネットワーク
- ネットワークの構成方法や重みの計算方法等
- プログラミング言語のライブラリを使用すれば簡略化できるが、ブラックボックスのままにしておくと対処不能なエラー等が増える
- プログラミング言語(Python等)
- 学習したニューラルネットワークを実装するための手段
- 機械学習のライブラリはもちろん、グラフの表示等の出力結果を見やすくする方法も必要
上記の順番が非常に大切です。まずは微積や線形代数を抑えて、並行してニューラルネットワークの構成方法についてを学習していくと、理解が深まります。上記の2, 3の内容をカバーする教材としては下記がおすすめです。
O’REILLY BOOKS : ゼロから作るDeep Learning――Pythonで学ぶディープラーニングの理論と実装
内容
外部のライブラリに頼らずに、Python 3によってゼロからディープラーニングを作ることで、ディープラーニングの原理を楽しく学びます。ディープラーニングやニューラルネットワークの基礎だけでなく、誤差逆伝播法や畳み込みニューラルネットワークなども実装レベルで理解できます。
上記の説明の通り、ライブラリに頼ること無くニューラルネットワークの学習を進めながらPythonでの記述方法も学ぶことができる良書です。ただし、数学の知識があることが前提で進みますのであらかじめ微積や線形代数の学習は必須となります。
参考:O’REILLY BOOKS : ゼロから作るDeep Learning――Pythonで学ぶディープラーニングの理論と実装
まとめ
いかがでしたか?AIは遠い世界の話で、自分で学習していく方法は無いと思われていた方にとっては本内容は良いサプライズであったかもしれません。人工知能という分野はこれからもより注目されていく分野となりますので、時間をかけてでも学んでいくメリットはあるかと思われます。
本記事がこれからAIを学んでいく方への手引きとなれば幸いです。