2017年は人工知能元年といっても過言でないほど、ニュースやテレビなどで人工知能が報道された年でもありました。人工知能を搭載した様々な商品やサービスがリリースされており、中にはワクワクするものもたくさんありました!(個人的にはAmazon Echoの日本発売およびAlexaの日本語対応は非常に嬉しかったです)
エンジニアの方であれば、人工知能を作ってみたい!とお考えの方も多いかと思います。本記事では、現在エンジニアとして活躍さられている方を対象に、人工知能を作り始める前に知っておくべき3つの事をまとめました。
そもそも人工知能とはいったい何なのか?どのようなプログラミング言語で構築されているのか?人工知能を作るには、どのような知識が必要なのか?これから人口知能(AI)の世界へ飛び込もうと考えている、エンジニアさんが抱えている疑問を見ていきましょう。
この記事の目次
【知っておくべきこと その1】そもそも人工知能とは?
もはやニュースや新聞で目にしない日はないと言えるくらい使われている言葉「人工知能」。そもそも人工知能とはいったい何なんでしょうか?
人工知能と聞いてパッと思いつくものとして、未来からやってきた猫型ロボットや、I’ll be backがキメ台詞の少年を守ってくれるあのロボットや、コロッケが大好きなちょんまげロボットを私は思い浮かべます。
人工知能と聞くと、こんな夢が溢れるようなロボットたちを思い浮かべてしまいますが、実際にニュースなどで聞く「人工知能」はもっとしょぼい実用的かつ限定的な人工知能です。
少し煽りすぎましたが、話を元に戻しましょう。これだけニュースを騒がしている人工知能ですが、実は明確な定義というものがありません。人工知能という言葉は非常に大きなカテゴリを指しており、立場などによって定義が異なります。
人工知能(じんこうちのう、英: artificial intelligence、AI)とは、「計算機(コンピュータ)による知的な情報処理システムの設計や実現に関する研究分野」を指す
– wikipedia 人工知能
「AI(Artificial Intelligence:人工知能)」技術は、「学習」「認識・理解」「予測・推論」「計画・最適化」など、人間の知的活動をコンピュータによって実現するもの、と定義されています。
– NEC 人工知能とは
例を挙げればきりがありませんが、ご覧の通り人工知能というものは一概に定義がされているものではありません。様々な研究や実用的なシステムが入り混じって「人工知能」を織り成しています。
人工知能の2つの種類 (強いAIと弱いAI)
定義が曖昧な人工知能ではありますが、人工知能という言葉を考えた際に、大きく分けると2種類に分けることが可能です。それが「強いAI」と「弱いAI」という考え方です。
強いAIと弱いAIの分類の基準として、AIがどれだけ人間の精神を模範しているかを基準にしています。人口的に作りだしたコンピューターが、人間のような意識や感情を認識して、与えられた、または自ら作りだして仕事を行う人工知能を「強いAI」と言います。
逆に弱いAIとは、人間のような意識や感情、さらには統括的に物事を理解する能力が無く、限られた知性的な処理を行える人工知能を指します。
強い・弱いAIですが、「汎用型(強い)」と「特化型(弱い)」で表されることもあります。
汎用型AIは、特定の作業やタスクに限定せず人間と同様、あるいはそれ以上の能力を有する人工知能を指します。通常のシステムであれば、人間がプログラミングを行なって、「部品Aと部品BをCを使って組み立てる」といった具体に指示を出さなくてはいけません。汎用型人工知能は、その指示が無くても、「Cを組み立てるためには部品Aと部品Bを使う」と学習をしてタスクをこなすことが可能です。
対して特化型人工知能とは、特定の決まった作業ができるAIを指します。具体的には、自動運転技術や画像判別、さらには翻訳や囲碁などのゲームなどで使われている人口知能を指します。本来であれば人間がプログラミングを行なって遂行していたタスクを、機械がデータを学んで特定のタスクのみを遂行します。
テレビなどで「人口知能」の話題になると、汎用型人工知能と特化型人工知能をごっちゃにして話されることが多く、一般的な消費者に間違った人工知能の印象を与えているように見受けられます。
ニュースなどで「人工知能搭載」と謳っているサービスや商品は、「特化型AI」を活用した商品です。汎用型AIは現時点では研究段階となっており、世界中の様々な機関や団体が研究を行なっています。最先端の研究では、汎用型人工知能は人間の2〜4歳くらいの知能と言われています。
ポケットからワクワクするような便利な道具を出してくれる猫型ロボットは「強いAI(汎用型人工知能)」で、Facebookで写真を投稿したら自動的に顔を識別してタグをつけくれる機能は「弱いAI(特化型人工知能)」となります。
人工知能と機械学習の親密な関係性
人工知能の大枠を説明して参りましたが、ここからはより具体的に「どうやったら人工知能を作れるのか?」を見ていきましょう。次に重要となる言葉が、「機械学習」です。既に耳にされたエンジニアの方も多いかと思いますが、人工知能と機械学習の関係について見ていきましょう。
人工知能を歴史的に遡ると、1956年に開催されたダートマス会議まで遡ります。ダートマス会議で集まったコンピューター科学者がAIという新たな分野を確立したのです。それ以来、世界中の様々な大学や研究所でAIの研究は行われてきました。
1950年から始まった人工知能の研究の焦点は汎用型AIでした。既に全項目でも触れましたが、コンピューターが人間と同様またはそれ以上の知能を身につけ、様々なタスクを行う汎用型AIですが、2018年の現在に到るまで実現はされていません。
汎用型AIの研究の一部として、1980年代に入ると、一つの新たな分野が生まれます。それが「機械学習」という分野です。非常に高度かつ複雑な汎用型AIとは異なり、特定のタスクをコンピューターが学んで遂行する特化型AIの手段の一つとして「機械学習」は確立されました。
機械学習とは、世の中の特定の事象についてデータ解析を行い、その結果をコンピューターが「学習」して、判断や予測を行うためのアルゴリズムを使用する手法となります。言葉で見ると、少しややこしいので、より具体的な例を使って機械学習をイメージしてみましょう。
日本のとある地域のマンションの家賃を考えて見ましょう。まずは下記の表を見てください。
マンションの家賃ですが、敷地面積や間取り、さらには築年数などの条件で決まりますよね。人間であれば、部屋探しをしていて、条件を見るだけである程度の家賃相場がイメージできるかと思います。
そのイメージ(つまり家賃相場を予測する)をコンピューターが行うのが機械学習です。機械学習では、コンピューターに敷地面積や間取りなどのデータを「学習」させます。人間と同じように過去のデータから学習をしたコンピューターに、新しいデータ(上記例だと最後の行)を提示することで、過去データの傾向を「学習」した機械が家賃相場を予測してくれるのです。
この機械学習ですが、従来のプログラミングとどのような違いがあるのでしょうか?従来のプログラミングであれば、「敷地面積が27平米、間取り1K、築年数10年の家賃は7.2万円」といった具合に、人間が家賃の条件となるデータのロジックを組み立てて、それに応じてコンピューターが結果を出力するものでした。明示的なロジックを組み込まなくても、データを分析して(学習)して予測を行う部分が機械学習と従来のプログラミングの異なる点です。
では、話を人工知能に戻しましょう。
1950年代から研究されてきた「汎用型人工知能」の分野の中で、上記のように特定のタスクをデータを分析して解決する「機械学習」の研究も盛んに行われるようになります。つまり、機械学習と人工知能は異なるものでは無く、人工知能という大きな分野の中に機械学習という特化型の人工知能の分野が属しています。
よくニュースなどで目にする「人工知能搭載」の商品やサービスは、汎用型人工知能が搭載されている訳ではなく、この「機械学習」(またはその応用)の技術が使われています。Facebookの顔識別やGoogle翻訳、さらにはAppleのSiriや自動運転技術に至るまで、根底となるベースの技術は「機械学習」なのです。
つまり人工知能を作るということは、この「機械学習」を構築することと言えます。
【知っておくべきこと その2】人工知能(機械学習)を作るのに必要な知識とスキル
人工知能を作る=機械学習のモデルを構築するとは同意義ですが、人工知能の言葉が曖昧ですので、不必要な誤解や混乱を招きます。ここからは、「人工知能」を改め「機械学習」で統一していきたいと思います。
さて、機械学習の大枠はご理解いただけたかと思いますが、この機械学習を構築するにはどのような知識やスキルが必要でしょうか?例えば一般的なウェブ・アプリケーションを開発する場合は、下記のようなスキルと知識が必要ですよね?(念のための注釈ですが、PHPでなくてもRubyやPythonのように使える言語やフレームワークは多数存在しており、あくまで一例です)
- PHPでバックエンドの主要機能を開発(ログインシステムなど)
- MySQLでデータベースの構築(ユーザー情報など)
- HTML&CSSでフロントエンドの構築
- JavaScriptでインーターフェースの構築
ソフトウェア・エンジニアと言った具合に、機械学習の構築を行う職種を「機械学習エンジニア」または「データサイエンティスト」と呼びます。(参考記事:機械学習エンジニアってどんな人?)
機械学習をこれから学びたいと考えている方に向けて、機械学習エンジニアが身につけておくべき知識・スキルは以下の通りとなります。
①線形代数の基礎知識
いきなり意味のわからない言葉が・・と焦らないでください(笑)。理系エンジニアの方であれば、馴染みの深い方も多いかと思いますが、機械学習では線形代数の基本的な理解は必要です。線形代数とは、行列の性質や扱い方に特化した数学です。以前は理系の高校生三年生であれば学ぶ内容でしたが、最近は大学一年生からに変更したようです。
線形代数と聞くと、いかにも難しい内容に聞こえますが・・安心してください。線形代数の全てを理解するのが理想ではありますが、必要最低限の基本的な重要点を理解するだけでも大丈夫です。行列とは何なのか?行列の足し算や掛け算はどのようにやるのか?などです。
基本的な線形代数を理解しておくことで、機械学習を実際に構築する際に必ず役に立ちます!文系エンジニアの方や、線形代数を忘れてしまったかは、codexaの線形代数入門コースを是非ご参考ください!
②統計の基礎知識
線形代数と同様に統計の基本的な知識も必要です。こちらも前項の線形代数と同様に、統計の全てを理解するのが理想ではありますが、初歩的な基礎知識だけでも大丈夫です。
機械学習を勉強しているとMeanやMedian、さらには標準偏差や正規分布など、統計の用語が頻繁に使われます。それらの用語の基本的な理解ができれば問題ないかと思います。
③Pythonとライブラリ
さて、次はいよいよ「Python」です。ウェブ・アプリケーションを構築する際に使う言語がPHPのみならず、RubyやJavaと選択肢があるように、機械学習でも複数の言語でモデルの構築が可能です。
Python以外にも「R」や「Octave」などの言語を利用して機械学習のモデル構築を行うケースもありますが、まずは「Python」から入るのが良いかと思います。理由として、Pythonがおそらくもっとも一般的に使われている言語で、チュートリアルや書籍など、機械学習を学ぶための環境が揃っているからです。また、プログラミングの経験がある方であれば、Pythonの基本的な仕組みを理解するのは、さほど大変なことではないかと思います。
次に機械学習で利用されるPythonのライブラリが幾つかあります。これらのライブラリも必須ではありませんが、機械学習のモデル構築をやろうと考えると、遅かれ早かれ使うことになります。
- Numpy – 数値計算を効率的に行うためのライブラリ
- Pandas – データ操作を高速かつ簡単にしてくれるライブラリ
- Matplotlib – 様々なグラフ描写を行えるライブラリ
上記以外にも、Scikit-Learn(機械学習のアルゴリズムが簡単に実装できるライブラリ)やKeras(ニューラルネットワークの実装が行えるフレームワーク)などもありますが、まずは上記の3つのライブラリの基本的な使い方を勉強するのが良いかと思います。codexaにて各ライブラリの初歩的な使い方講座を配信していますので、こちらも併せてご参考ください。
以上が、必要最低限の人工知能を作るための知識とスキルとなります。一見すると、線形代数やら統計などが絡んでおり、非常にハードルが高いように思えますよね。次の項目では、そんな方でもスムーズに機械学習の世界へ飛び込めるコツをまとめてみました。
【知っておくべきこと その3】機械学習を学ぶならトップダウン学習がオススメ
そもそもPython一つとっても面倒なのに・・線形代数やら統計やら・・やっぱり人工知能を作るのってハードル高すぎってお考えの方!ご安心ください。大丈夫です。
そんな方にオススメなのが「トップダウン学習」という方法です。具体的に、機械学習の勉強をスムーズに行うコツを見ていきましょう。
機械学習は本来であれば4〜6年勉強するものです
さて突然怖い見出しをつけてしまいましたが、これは事実です。現在、最先端で活躍さられている人工知能・機械学習エンジニアの方々は、大学4年間でコンピューターサイエンスなどを専攻して、さらに多くの方々は大学院で機械学習・人工知能を学んできた方々です。
本来であれば、機械学習をマスターするのに、それだけの時間と労力が必要となります。
しかしながら、すでに社会人として働いている人にとっては、仕事をやりながらそれだけの労力も時間も避けない人がほとんどかと思います。
そんな方々にオススメなのが「トップダウン学習」です。機械学習のアルゴリズムをしっかりと基礎から理解をして、モデルの構築を行うのが理想ではありますが、トップダウン学習では「まずはやってみる」に重きをおきます。
ライブラリやフレームワークをフル活用がポイント
いきなり難解なアルゴリズムの構築をするのはハードルが高いですが、それを使うのはさほどハードルは高くありません。機械学習のアルゴリズムを簡単に使えるライブラリやフレームワークが多数存在しています。ここでは、すぐにでも使えるライブラリをまとめてみました。
①Scikit-learn
機械学習の初級者から上級者までこよなく愛されるライブラリ「Scikit-learn(読み方:サイキット・ラーン)」です。Pythonの機械学習ライブラリです。機械学習の基本となる線形回帰やロジスティック回帰、さらにはランダムフォレストやサポートベクターマシンなど、様々な種類のアルゴリズムがすでに組み込まれており、使い方を覚える必要はありますが、非常に簡単にモデルの構築を行うことが可能です。
②Keras
こちらも機械学習エンジニアからこよなく愛されるライブラリの一つです。読み方は「ケラス」と読みます。Kerasを使えば、モジュール形式で非常に安易かつ効率的にニューラルネットワークの構築が可能です。
こちらもScikit-learnと同様に、使い方を理解する必要はありますが、ニューラルネットワークの詳細のアルゴリズムの理解がなくても、モデルの構築は行えます。しつこいようですが、アルゴリズムなどの理解があれば、より効率的かつ精度の高いモデルの構築が可能となることから理想ではあります。
しかし、時間と労力を割くのが難しい場合がほとんどですので、まずはニューラルネットワークを構築してみて、その都度、必要な知識や理解は穴埋めしていく、という学習スタイルがオススメです。
③Kaggle
最後はライブラリではありませんが、「Kaggle(カグル)」というサービスです。Kaggleは世界中のデーターサイエンティストや機械学習エンジニアが集まっているコミュニティーです。Kaggleでは、企業や政府がコンペ形式(競争形式)で課題を提示し、賞金と引き換えに最も制度の高い分析モデルを買い取るという、最近でいう一種のクラウドファンディングに近いような仕組みも提供しています。
機械学習初級者だと、いきなりKaggleのコンペに参加するのはハードルが高いですが、そんな方にオススメなのか「Kernel(カーネル)」です。
カーネルでは、様々なレベルのデーターサイエンティスト&機械学習エンジニアの方々が、コンペで出されている課題に対してのコードを公開しており、コードを写して実行することも可能です。
説明などは英語で書かれていますが、コードは世界共通ですので、色々なカーネルを参考にすることで、機械学習のテクニックや実装の考え方を勉強することが可能です。PythonやScikit-learnなど、初歩的な使い方をマスターしたら、是非Kaggleでカーネルを参考にして勉強してみましょう。(参考:Kaggleとは?)
まとめ
本記事では人工知能の作り方を既存エンジニアの方々に向けてまとめてみました。今流行りの人工知能・機械学習ですが、日本を含めて世界中で人材不足が深刻になっています。人材不足を裏付けるデータとして、米人材大手glassdoorによると、アメリカでの機械学習エンジニアの平均年収は約1350万円と非常に高額となっています。
一見、ハードルが高そうに見える機械学習ですが、一つ一つスキルや知識を積み上げれば、どなたでも実装は可能です!是非、これを機械に機械学習・人工知能の世界へ飛び込んでみましょう!
以上、「人工知能の作り方とは?エンジニアが人工知能(AI)が作り始める前に知っておくべき3つの事」でした。