AI(ディープラーニング)学習にオススメな書籍を学習ステップ毎に紹介!
「AIを扱えるようになりたいけどどう勉強すればいいかわからない...」
「AIの勉強をしたいけど数学が苦手....」
そんな悩みを抱えている方に、数学が大嫌いな筆者がAIに属するディープラーニングを学習するのに使用した本を紹介します。
AIとディープラーニングの違いについては、以下の記事をご覧ください。
今はネット上にいい情報がたくさんある。けど...
インターネット社会の現代では、ほしい情報はなんでもインターネットで得ることができます。
ディープラーニング学習に関しても例外ではありません。少し調べてみるだけでも、多くの人がわかりやすい情報を載せてくれています。
しかし、インターネットで得ることが難しい要素が一つだけあります。それは
体系的に学び、基礎を固めること
です。
確かにインターネット上にはたくさんの情報がありますが、それらの多くは断片的です(このブログ含め)。
加えて、その情報が間違っている可能性も、無視できない程度にはあります。
「断片的」で、「間違っているかもしれない」情報があふれているインターネット上から正しい情報を抽出するには、基礎力が必要です。
インターネットを活用するためには、まず本を使って基礎を固めるべき。筆者はそう考えます。
これから紹介する本は、あくまで「基礎を固める」ことを重要視しております。
これらの本を制覇したからといって、AI技術を自在に操れるようになるわけではないのでご了承ください。
知識ゼロの状態から始める時の本
Pythonスタートブック
何の知識もない場合、ディープラーニングの前にまずはプログラミングからです。
初心者がAIを扱うなら、Pythonを学ぶのが一番オススメです。理由は以下の記事をご覧ください。
antimath-ai.hatenablog.com
さて、Pythonを学ぶならPythonスタートブックがオススメです。(Amazonのリンクをつけていますので、気になる方は確認してみてください)
「はじめが一番難しい」といわれるプログラミング学習において、無理なく入門レベルから基礎レベルに上がれる良書です。
説明が簡潔かつ丁寧で、サクサク読み進めることができます。
また、サンプルコードも載っていますので、実際にプログラムを実行しながら学習できる点も非常に良いポイントと言えるでしょう。
入門Python3
「ゴリゴリ勉強したい」「とにかくカンペキを目指したい」という方は、オライリー社が出している入門Python3はいかがでしょう。(Amazonのリンクをつけていますので、気になる方は確認してみてください)
こちらは、基本的なPythonの考え方や、Pythonでできる動作をほぼ網羅したもので、ページ数はなんと600ページです。
この本をマスターすれば基礎レベルどころか中級レベルにも到達できますが、とにかく量が多くて大変です。
書かれている内容はそれほど難解ではないのですが、とにかく物量に押されてしまいます...
上で紹介した「Pythonスタートブック」の補助教材として、辞書的な使い方をするのもいいかもしれませんね。
プログラミングがわかってきたら読む本
プログラミングがについてすこしでも自信がついたら、次はAIを扱う準備を始めましょう。
戦略的データサイエンス入門 ―ビジネスに活かすコンセプトとテクニック
AIの前準備には実に様々なルートがあり、どのルートが最適かを決めることは困難です。
AIには属さない(少々原始的な)機械学習の手法をどんどんプログラムしていくもよし、数学が得意ならディープラーニングの理論を勉強するもよし...
筆者はプログラミングもあまり好きではなく、数学に至っては大の苦手です。そこで、数学もプログラミングも必要のない純粋な読み物を選択しました。
それが「戦略的データサイエンス入門 ―ビジネスに活かすコンセプトとテクニック」です。(Amazonのリンクをつけていますので、気になる方は確認してみてください)
AIはデータの細かな特性を完全に理解していなくても使えてしまうことが多いです。
しかし、だからといってデータの事を知らなくていいということはありません。
データのことを知っていると、AI技術を「わかった状態で」扱うことができるようになります。
この本は、予測の基本である「分類」「回帰」についての体系的な説明や、モデルの学習時に気を付けるべきことなど、データを扱うなら是非とも身に着けておきたい知識が詰まっています。
その上簡潔でわかりやすくまとめられており、サクサク読み進められます。
プログラミング学習の前に読んでみてもいいかもしれませんね。
いよいよディープラーニング!な時の本
いよいよディープラーニング!数学嫌いな筆者でも、抵抗なく学習できた本を紹介します。
最短コースでわかる PyTorch &深層学習プログラミング
数学をあまり気にせずディープラーニングを扱える本こそ、この「最短コースでわかる PyTorch &深層学習プログラミング」です。(Amazonのリンクをつけていますので、気になる方は確認してみてください)
なぜ数学を気にしなくていいかというと、数学の話は別書籍(最短コースでわかる ディープラーニングの数学)に完全分離しているからです。
(「最短コースでわかる ディープラーニングの数学」も非常にわかりやすい内容で、おススメです!数学への意欲がわけばチャレンジしてみてください)
そんなわけで、 「最短コースでわかる PyTorch &深層学習プログラミング」は、理論的な説明はイメージがわく程度にとどめ、Pythonを使用して実際にコードを実行しながら学ぶことができる本です。
細かいことがわからなくてもプログラムの実行はできますし、達成感があります。
さらに、煩雑なプログラム部分はライブラリ(プログラムのパッケージのようなもの)化してくれており、自分の作りたいモデルを作るのも容易です。
約550ページと、紙の本で買うとボリュームにしり込みするかもしれませんが、嘘のようにサクサク進めることができますよ!
まとめ
本記事では、数学嫌いな筆者がオススメするディープラーニング学習に役立つ本を紹介しました。
知識がなくても取り組みやすい本をピックアップしましたので、ぜひ参考にしてみてください。
ここまで読んでくださり、ありがとうございました。
【分かりやすく】オブジェクト指向について解説【基礎情報技術者試験】
言葉の意味
まずは、「オブジェクト指向」という言葉そのものについて考えていきましょう。
「オブジェクト」とは「物体」のこと、「指向」とは「ある方向に目標を定めて(目標を指さして)向かう」ことを示します。
つまり、「オブジェクト指向」とは「物体」という形態を目標にして向かっていくことを意味します。
...少し無理やりな気もしますが、ニュアンスを把握してください。
では、目標としている「オブジェクト」とは一体何なのでしょうか。
オブジェクトとは?
オブジェクト指向において、「オブジェクト」の辞書的な意味は
データとそれを操作するメソッドを一体化したもの
です。
「なんのこっちゃ」と感じる方が多いかと思います。非常にわかりにくい書き方ですね。
これをわかりやすく言いかえると
データ(という理解しにくいもの)を扱いやすくするために、メソッド(データをうまく処理するためのツール)を付属したもの
となります。
まだ少しわかりにくいですね。具体例を示します。
多くの人はスマートフォン(スマホ)を使っているかと思います。スマホは、タッチパネルに情報が映し出され、タッチ操作で私たちの意のままに扱うことができます。
このとき、私たちはタッチ操作によってスマホ内でどのような処理がなされているのかわかりません。しかし、意のままに扱うことはできています。
この時
スマホ内 → 理解しにくいもの(データ)
タッチパネル → スマホ内(データ)をうまく処理するためのツール(メソッド)
と言えます。そして、データとメソッドが融合した「スマホ」という「物体」のことを「オブジェクト」と呼ぶわけです。
オブジェクト指向とは?
これまでの解説から、オブジェクト指向は次のように説明することができます。
オブジェクト指向とは、何か複雑なものを設計する際、扱いやすいようにオブジェクトの集合体として設計しようとする考え方のこと
オブジェクトを積極的に使うことで、複雑な構造もメソッドで扱うことができるようになります。
結果、わかりやすくなり、「楽に」「レベルの高いものが」作り出せるようになりました。
オブジェクト指向の適用先
オブジェクト指向は、便利な概念として一般化されていますが、プログラミング言語にも採用されています。
有名なのは
・Python
・Java
です。これらの言語を勉強する機会があれば、本記事の内容を思い出してみてください。
きっと理解がスムーズになるはずです。
オブジェクト指向に関連する用語
ここからは、オブジェクト指向に関連する用語をいくつか紹介します。
基礎情報技術者試験で出題されることもありますので、用語と意味をしっかり押さえておきましょう。
カプセル化
カプセル化とは
オブジェクトのデータとメソッドを外部から見えないようにする(隠蔽する)こと
です。カプセル化により、他のものの影響を受けにくくすることができます。
設計図のある所をいじったら別のところも変えないといけなくなった...といった事故を減らすことができます。
なお、カプセル化されたオブジェクトのメソッドを使用したければ、メッセージを送ればよいです。
メッセージだけは、カプセルを透過することができます。
クラスとインスタンス
クラスは
オブジェクトのテンプレート
を、インスタンスは
クラスに具体的な設定を当てはめて作ったオブジェクト
を指します。
「オブジェクト」は概念的な定義がされていたのですが、クラスとインスタンスはオブジェクトを実践的な形に落とし込んだものと言えます。
具体例を挙げます。
クッキーを作るとき、星や動物の形をした型を使うことがありますよね?
あの型が「クラス」で、型を使って焼き上げたクッキーが「インスタンス」です。
継承
継承とは
あるクラスのデータやメソッドを、別のクラスに引き継ぐこと
です。
クラスは分けたいけど中身は似ている...といったときによく使われる手法です。
ポリモフィズム
ポリモフィズムとは
継承したメソッドを、名前を変えずに再定義する(オーバーライドという)
ことです。
ポリモフィズムにより、一つのメソッドで複数のインスタンスを扱うことができるようになります。
色々な操作があって面倒だから一つにまとめたい...でもそれぞれ動きが違う...というときに利用する手法です。
まとめ
最後にまとめです。
・「オブジェクト指向」とは、複雑な「データ」に操作用の「メソッド」を付与した「オブジェクト」を使っていこうという考え方のこと
・オブジェクト指向の関連用語として「カプセル化」「クラスとインスタンス」「継承」「ポリモフィズム」がある
ここまで読んでくださり、ありがとうございました。
【分かりやすく】シグモイド関数とソフトマックス関数について解説【ディープラーニング】
「シグモイド関数」と「ソフトマックス関数」って何?
「シグモイド関数」「ソフトマックス関数」は、ディープラーニングにおいて
計算結果を出力する
役割をもつ、非常に重要な関数です。また、2つの関数の違いは
シグモイド関数 → 2値分類(〇か✕か)をしたいときに使う
ソフトマックス関数 → 多値分類(例:犬か猫か狼かを判定)をしたいときに使う
となります。
どう使う?
この二つの関数の使い方について説明します。
そもそも、ディープラーニングのメイン機能は「データにフィットする関数を作る」ことです。
2値分類の例を下に示します。
データ点が二色(紫、黄)に分けられています。ディープラーニングは、これらの点を
このようにきれいに分割できる線を引くことができます。
しかし、線を引いたところで、実用的には全く嬉しくありません。上のグラフを例にすると、本来の目的は
あるデータが「紫」か「黄」かを判定する
ことだからです。そこで登場するのが「シグモイド関数」や「ソフトマックス関数」です。
上の例は2値分類のため、使用するのは「シグモイド関数」になります。
シグモイド関数の方がシンプルなので、まずはシグモイド関数から説明します。
シグモイド関数
シグモイド関数は、以下のような数式で表せます(意味は分からなくても大丈夫です)。
これをグラフにすると、以下のようになります。
これがどういう意味を持つかについて説明します。
まずはyに注目してください。値が0~1になっていますね。
これは、「yは確率値である」ことによるものです。y=0.2なら20%、といった具合です。
何故確率を使うのかというと、分類を簡単に行うためです。今回の場合、
とあらかじめ決めておきます。
そうすることで、yの値が出た瞬間に分類ができるようになります。
対してxについてですが、こちらは値の範囲に意味はありません。
xは「ディープラーニングの結果」を表します。
つまり、ディープラーニングの結果をシグモイド関数のxに代入すると、yという確率値が出てくるということになります。
そして、yの値が出てくることで、「紫」か「黄」の分類ができることになります。
これが、シグモイド関数の役割です。
ソフトマックス関数
続いて、ソフトマックス関数について説明します。
先ほど説明した「シグモイド関数」は、2値分類用の関数です。3値以上の多値分類では、厳密に適用することは難しいです。
(例えば、3値分類にシグモイド関数を適用したいとき、yの境界を0.3333333.....と0.66666666....で分けるということになり、境界値付近の処理が厄介になってしまいます)
そこで登場するのがソフトマックス関数です。
ソフトマックス関数は以下の式で表されます(こちらも意味は理解しなくて大丈夫です)
ややこしい式ですね。これを3値分類の時用に変換すると、次のようになります。(i=1,2,3)
簡単にいうと、「分類する3つのものについてディープラーニングを通して結果(x)を出し、それぞれの値に対して全体における割合を計算する」ということです。
イメージは下のようになります。
ソフトマックス関数を使用することで、何値分類であっても分類を行うことができるのです。
これが、ソフトマックス関数の役割です。
まとめ
最後にまとめです。
・「シグモイド関数」と「ソフトマックス関数」は、ディープラーニングの結果を実用化するためのもの
・2値分類であればシグモイド関数を、3値以上の多値分類であればソフトマックス関数を使う
ここまで読んでくださり、ありがとうございました。
AI学習でも英語は大事
AIと英語の関係についてお話します。
AIをやるなら英語ができるに越したことはない
AI関連のことを深く知っていきたいなら、英語は非常に大きな武器になります。その理由は
・AIの最新情報は英語で流れてくるから
です。
それぞれについて説明します。
AIに関する各種用語の学習がスムーズになる
IT系の用語にはとにかく横文字が多いです。横文字だけならともかく、英熟語から個々の単語の頭文字をとった用語が頻繁に用いられる傾向があります。
例として「AI」を用いましょう。
AIの日本語名称は「人工知能」ですね。では、なぜ英語では「AI」と呼ぶのでしょう。
「AI」は「Artificial Intelligence」 の頭文字をとっています。
「Artificial」は「人工の、人造の」という意味を表し、「Intelligence」は「知能、知性」を表す英単語です。
これらの日本語訳をつなげると「人工知能」になりますね。よって、「人工知能」は「AI」の直訳であることがわかります。
ここまでの内容を読んで、AIについての知識が増えたような気がしませんか?
言語を変えることで1つの単語でも2度学ぶことができ、理解も深まります。これが英語を勉強するメリットの1つです。
他にも、プログラミング言語は英語ベースのものが大半なので、英語の勉強をするとプログラミング学習へのハードルも下がります。
AI技術の実装にプログラミングの知識は必要不可欠なので、こちらも大きなメリットです。
AIの最新情報は英語で流れてくる
インスタグラム、Twitter、Facebook... 今や誰もが利用しているソーシャルメディアですが、これらはいずれも海外(主にアメリカ)発のものです。
これらと同様に、AI関連の最新技術もそのほとんどが海外から発信されます。
発信元は英語圏ではないことも多いですが、多くの研究者は、自身の功績をより広く伝えたいため、世界スタンダード言語である英語で発信をします。
そのため、最新情報をいち早く手に入れたければ、英語が読めることは大変重要なスキルとなってきます。
「別に最新情報を急いで手に入れなくても、十分世に広まってから日本語化された情報を見たらいいのでは?」と思う人もいるかもしれません。
それも駄目というわけではないのですが、AIという業界ではそれは少々不利になります。
なぜなら、AI業界は現在非常にホットな業界であり、ものすごいスピードで開発が進んでいます。
ですので、情報がやってくるのを待っていたら、置いていかれてしまう可能性が非常に高いのです。
せっかくAIについて学習するなら、業界の最新情勢も知っておきたいですよね?
この点で、英語を勉強しておく価値は十分にあると言えるでしょう。
ではどうやって勉強すれば良いか
「仮に英語が必要だとして、どうやって勉強したらいいのか」と思う方もいらっしゃるでしょう。
筆者のオススメは
AI関連の英語論文を読む
ことです。要は習うより慣れろってことです。
一見無謀に聞こえるかもしれませんが、実は論文の英語はレベルがかなり低めです。
なぜなら、論文の目的は「世界中の多くの人達に自分の功績をアピールする」ためだからです。
つまり、
・文学的要素が必要ない(むしろ邪魔)
・読み手が非英語圏の人であることも考慮して書かれている
ということです。
「英文をとりあえずGoogle翻訳に突っ込み、訳せない専門用語はググる」
これだけで結構読めますし、AI関連の専門用語も知ることができて効率がいいです。
英語論文を探すときはarxivがオススメです。無料で論文を読むことができます。
リンクからページに飛んで、「AI」「Deep Learning」などと調べ、上の方に出てきたものをとりあえず読んでみることをオススメします。
初めは苦痛かもしれませんが、中身の伴った文章なので、英語学習のための文章を読むよりずっと効率的だと思います。
最初の一歩を踏み出すのに勇気のいる方法ですが、ぜひトライしてみてください!
まとめ
最後にまとめです。
・英語はAI関連の用語への理解を深めるための心強い味方
・英語の勉強は英語論文がオススメ
ここまで読んでくださり、ありがとうございました。
【分かりやすく】勾配降下法について解説(ディープラーニング)
勾配降下法って何?
勾配降下法とは、ディープラーニングの中で非常に重要な役割を果たしている技術です。なぜなら、
ディープラーニングの「ラーニング(学習)」の部分だから
です。
ディープラーニングは、データを使って何百回、何千回と学習を繰り返し、最適な形にフィットしていく手法です。
ではどうやって学習していくのか。そこで使われるのが「勾配降下法」なのです。
勾配降下法の仕組み
ディープラーニングにおいて、学習は「誤差の最小化」という形で行われます。
正解の形と現在の自分の結果を比較し、異なっている部分(誤差)を減らすように学習を進めます。
そして、異なっている部分(誤差)は勾配という形で表現します。
この「勾配」について、もう少しかみ砕いて説明します。
誤差は、ディープラーニングでは「誤差関数」という形で扱われます。数字(スカラー)ではなく、関数です。
2次以上の関数では、最小値や極小値が存在します。中学や高校の数学で学習したかと思います。誤差関数では、最小値や極小値がそのまま「誤差の最小値」となります。つまり、誤差関数の最小値や極小値を求めれば良いわけです。
ではどのようにして最小値や極小値を求めるかというと、「誤差関数上の1点における傾きを求める」という手段を取ります。この傾きを、ディープラーニングでは「勾配」と表現しています。
今、誤差関数上のある点にいるとします。その時、その点が「下っている」ことがわかれば、その先に最小値がありそうだと想像できますよね。逆に、ある点で「上っている」ことがわかれば、最小値は通り過ぎていることがわかります。
目標は「最小値にいく」ことなので、得られた傾き(勾配)の情報を使用して、今いる点から最小値があるだろう点に移動しようとしますよね。
このような移動を繰り返すと、最終的に最小値の地点に到着することができます。これこそが「勾配降下法による学習」です。
なぜ「勾配」というのか
ここまで読んでくださった方の中には、「なぜ傾きのことをわざわざ勾配と呼んでいるの?傾き降下法でよくない?」と考えた方もいらっしゃるかもしれません。
確かに、上の図のような2次元空間であれば、傾きという表現で十分でしょう。しかし、現実世界には3次元以上のものがあふれかえっています。
例として、3次元の場合を見てみましょう。3次元でのグラフは下のようになります。
この場合、「傾き」よりも「勾配」といった方がしっくりきませんか?現実世界ではこのようなケースの方が多いため、「勾配」という表現が一般的に使用されているわけです。
まとめ
最後にまとめです。
・勾配降下法は、ディープラーニングの「学習」の部分を担う重要な要素
・勾配降下法は、誤差関数上で、傾き(勾配)を用いて誤差の値が最小になるように学習を進めていく手法
以上です。ここまで読んでくださりありがとうございました。
【資格】AI初心者にオススメの資格はITパスポートよりも「基本情報技術者試験」
これからAI技術を武器にしていきたい...でも何をどう勉強すればいいかわからない...そんな方は資格を取ることをオススメします!
本記事では、AI初心者が合格するべき試験である「基本情報技術者試験」についてまとめました!
そもそも資格は必要?
「資格なんてハリボテ」「資格とる暇があるなら実際に動かしてみるべき」...
そう思う方も多いでしょう。その意見も一理あります。資格のゴールはあくまで「証明書の取得」であり、「実用技術レベルのアップ」ではないからです。
しかし、特にIT系の資格については、AI初心者の取得価値が高いといえます。これから、その理由について説明していきます。
AIの適用可能性を考えやすくなる
AI技術は、対象に適用して初めて効果を発揮します。逆に言えば、技術を持っていても、適切な場面に適用できなくては意味がありません。
例えば「自宅に人検出ができるカメラを設置して、外出先でもスマホで常時監視可能な防犯カメラにしよう」と考えたとします。
この場合、「人検出ができるカメラ」はAI技術を使って実現できるかもしれません。しかし、以下のような問題が発生します。
・カメラのデータをどうやって送信する?
・送信できたとして、セキュリティは大丈夫?
・人を検出したかどうか、いちいち情報をチェックしなければならない?通知とか出せない?
・スマホの通知ってどうやって出すの?
...
と、AIでは解決できない様々な問題がでてきます。これらはすべて「ITに関する課題」です。
そんな時、ITに関する幅広い知識を持っていれば、その場で解決はできずとも解決の糸口はつかめるはずです。資格(特に基本情報技術者試験)は、その幅広い知識を網羅しています。
これが、資格が必要な理由です。
なぜ基本情報技術者試験?
資格の必要性については上で説明したとおりです。では、なぜ基本情報技術者試験なのでしょうか。
その理由はズバリ、
・国家試験であり、就職時、転職時、社内でのアピール時に使えるから
・IT関連全般の知識を勉強できるから
・上記メリットの割に、難易度が(比較的)高くないから
です。
それぞれについて、更に詳しく説明していきます。
基本情報技術者試験は国家試験
基本情報技術者は国家試験です。国家試験には一定の信頼性があるため、勉強で得た知識のほかに、他人へのアピールの武器を増やすことができます。
IT関連全般の知識を勉強できる
IT系の幅広い知識が求められる資格はそう多くありません。信頼性の高い国家試験に関していうと、IT関連の試験は以下のような構造になっています。
図を見ていただくとわかるように、ITの専門知識を幅広くカバーできる試験は「基本情報技術者試験」と「応用情報技術者試験」の二つだけであることがわかると思います。
IT系の資格としては「ITパスポート」が有名ですが、ITパスポートは図の通りITの一般知識しか習得できないので、AIを武器にしたければ不十分であると言えます。
難易度が低めなのは基本情報技術者試験
上で説明した通り、ITの専門知識を幅広くカバーできる試験は「基本情報技術者試験」と「応用情報技術者試験」の二つです。この二つのうち、どちらを取得すれば良いのでしょうか。
結論から言うと、初心者は二つとも取得した方が良いです。しかし、名前の通り、「応用情報技術者試験」は難易度が高めです。よって、まずは「基本情報技術者試験」の取得を目指すのが良いでしょう。
基本情報技術者試験の日程、勉強時間は?
日程、試験時間、受験料
基本情報技術者試験は、2022年現在「CBT方式」という試験方式を採用しています。これは、特定の日に一斉に試験を実施するのではなく、任意のタイミングでPCを使用して受験できるというものです。
しかし、任意のタイミングと言っても、1年中受験できるわけではなく、おおよそ次の2期間に分けられます。
【受験できるタイミング】
4月上旬~5月下旬(受験申込:3月~5月中旬)
<下期>
9月上旬~11月下旬(受験申込:8月~11月中旬)
試験は午前、午後に分かれており、それぞれ2時間半の長丁場です。午前は基本知識を、午後は応用知識を問う形式となっています。
また、受験手数料は7500円です。少し高いので、一発合格を目指しましょう。
合格ラインと勉強時間
勉強時間は、IT系の初心者であれば約3か月と言われています。これは、毎日1~2時間程度勉強する場合の想定です。
これだけ見ると、「やっぱり大変じゃないか...」と思うかもしれません。しかし、これはかなり余裕を持たせた設定で、実際にはもっと少ない勉強量でも合格する可能性は十分にあります。
基本情報技術者試験の合格ラインは6割です。対して、想定勉強量は余裕を持たせて8割取得を前提としています。よって、ギリギリでもよければ1.5~2か月程度でも十分合格できると言えます。
合格だけが目標じゃないので、時間はしっかりとろう
冒頭でも述べた通り、本記事で目標としているのは「基本情報技術者試験の合格」ではなく「AI技術適用のための幅広い知識の習得」です。
目的を達成したければ、8割と言わず満点を狙うつもりで勉強しましょう。きっと素敵なAI生活が待っているはずです。
まとめ
今回の話をまとめると
・AI初心者はITに関する幅広い知識を身に着けるべし
・幅広い知識を身に着けるために「基本情報技術者試験」を受けるべし
・合格ではなく、満点を目指して勉強すべし
となります。
【プログラミング】AIに興味があるならPythonかC++がオススメ
本記事では、AIツールを自作する際にオススメなプログラミング言語についてまとめました!
プログラミングは必須?
AIを使ったツールを自作したい場合は、プログラミングの知識はほぼ必須と言えます。
「自分のやりたいこと」を機械に指示する方法は、現在のところプログラミングしかないからです。
「プログラミングは難しそう...」というイメージを持っている方も多いかと思います。
しかし、1から10まで理解する必要はありません。
適切な手段を選択すれば、誰でもAIツールを自作することが可能です。
一番のオススメはPython
AIツールを自作するにあたって、筆者が最もお勧めするのはPythonです。
Pythonには、以下のようなメリットがあります。
Pythonのメリット
1. コードがわかりやすい(人間目線で作られている)
2. AI関連のライブラリ(あらかじめ作られたパッケージ)が豊富
3. 人気があるので、先人たちのコードがネット上にゴロゴロ転がっている
それぞれについて解説していきます。
1. コードがわかりやすい(人間目線で作られている)
Pythonはの大きな特徴の一つとして、「コードがわかりやすい」というものがあります。
これはPythonがプログラミングコードの読みやすさ、書きやすさを重視した言語だからです。
例えば、以下のプログラミングコードを見てください。
print("これがPythonのプログラミングコードです。")
これは、単純に
「これがPythonのプログラミングコードです。」
と表示させるだけのプログラミングコードです。
1行だけです。単純なものなので、「まあこんなもんか」と思う方が多いかと思います。
しかし、同じものを、代表的なプログラミング言語である「C言語」で書くと、以下のようになります。
#include <stdio.h> int main(void) { printf("これがC言語ののプログラミングコードです。.\n"); }
Pythonとは違い、4行も必要となります。
この単純な例だけでも、Pythonが以下に読みやすく、書きやすいプログラミング言語であるかがわかると思います。
2. AI関連のライブラリ(あらかじめ作られたパッケージ)が豊富
Pythonは、今や大人気のプログラミング言語です。そのため、やりたいと思ったことは大抵ライブラリ(あらかじめ作られたパッケージ)が存在しています。
自分で1からプログラミングコードを書く必要がないので、知識が少ない状態からでも気軽に始められるメリットがあります。
3. 人気があるので、先人たちのコードがネット上にゴロゴロ転がっている
2. に類似していますが、ライブラリに限らず、Pythonにはネット上に心強い味方がたくさんいます。
特に、初心者の困りごとは、99%がググれば解決します。
調べ方も、
「〇〇 やり方」
とか、
「〇〇エラー なぜ」
といったような雑な感じでも十分なくらいです。
この安心感も、初心者には心強いですね。
Pythonのデメリット
ここまで読むといいこと尽くしのようにも思えるPythonですが、デメリットも存在します。
Pythonのデメリットは
・処理速度が遅い
ということです。
これはなぜかというと、「人間目線」と「機械(コンピュータ)目線」はトレードオフだからです。
Pythonのメリットの一つとして「読みやすく、書きやすい」というものがありましたが、これは「人間目線」に特化した結果です。
上で示したプログラミングコードで、PythonよりもC言語の方がコードが長かったのは、
「機械(コンピュータ)にとって読みやすくするための情報を与えていた」
からです。
Pythonは、機械(コンピュータ)に対して与える情報を削っていたため、人間にとってはわかりやすくても、機械(コンピュータ)にとっては「足りない情報を推測する」
ことに時間を割く必要があり、結果的に処理が遅くなってしまうわけです。
よって、Pythonは「カメラを使ってリアルタイムで人物の検知をしたい」といったような、処理速度が求められるAIツールの作成には少々不向きであると言えます。
処理時間を重視するならC++
リアルタイム性を求めるAIツールを作りたい場合は、「C++」というプログラミング言語をオススメします。
この言語は、名前の通り「C言語」を拡張したものです。大きな特徴として
・汎用性が非常に高い
・実用に特化しており、処理速度が非常に速い
が挙げられます。
特に、処理速度の速さは圧倒的で、一般的にはPythonの10倍以上とも言われています。圧倒的ですね。
筆者の会社でも、「開発段階はわかりやすく書きやすいPythonを使用し、実装段階では処理の速いC++」というように使い分けています。
趣味の範疇では処理速度が気になることは少ないかもしれませんが、ビジネスでの使用を考えているならC++を選択肢に入れてもいいかもしれません。
ただし、C++の大きな欠点として、
学習レベルがかなり高い
ことは頭に入れておいた方がいいと思います。いばらの道になる覚悟のある人は、ぜひC++の習得にチャレンジしてみてください。
まとめ
結論としては、AIを使ったツールを自作したい場合、勉強すべきプログラミング言語は
処理速度とか気にしないので手軽に実装したい→Python
早さを追い求めたい、ビジネスにしたい→C++
となります。
本記事が参考になれば幸いです。