ディープラーニングのプログラムはどのようにして作るのか? プログラムに関連するライブラリやフレームワークといった周辺知識を説明する。
ご注意:本記事は、@IT/Deep Insider編集部(デジタルアドバンテージ社)が「deepinsider.jp」というサイトから、内容を改変することなく、そのまま「@IT」へと転載したものです。このため用字用語の統一ルールなどは@ITのそれとは一致しません。あらかじめご了承ください。
前回はコンピューターの基礎の基礎を紹介した。今回は、アプリケーションと開発の基礎の基礎を紹介する。※脚注や図の番号は前回からの続き番号としている。
今回は、プログラムを作る側の視点で、プログラムについてもう少し掘り下げて説明しておこう。
ちなみにプログラムを作ることを「開発」(Development)と呼び、作る側の人は「開発者」(Developer、デベロッパー)、使う側の人は「ユーザー」(User)と呼ぶ。
例えば「Chrome」などのWebブラウザーがある。これは、確かにここまでに説明してきたプログラムの一種ではあるが、一般的には「プログラム」ではなく「ソフト」や「アプリケーション」と呼んでいるではないだろうか(※「アプリケーション」は最近では、スマートフォン向けの「アプリ」の影響で「アプリ」とも呼ぶのが一般的だ)。
では、プログラムとアプリケーションは何が違うのだろうか?
アプリケーション(Application)は、何らかの目的を達成するために「メインプログラムとその支援機能をまとめたもの」のことである。例えばLesson 1で示したWebアプリ「ニューラルネットワーク Playground - Deep Insider」について見てみよう(図1)。
このWebアプリは、「Playgroundの本体機能を実現するメインプログラム」だけではなく、「グラフ描画機能を提供するD3.jsという支援機能(厳密には、後述するライブラリ)」や「Webページのデザインを提供するMaterial Design Liteという支援機能(厳密には、後述するライブラリ)」が組み合わさって出来たものである(図9)。
もう少し言うと、ユーザーにとっては、アプリケーション内の個別のプログラムを使うというよりも、アプリケーションというひとまとまりのものを使う、というイメージになる。
もう1つ例を出そう。WindowsやmacOSといったOSも「プログラム」であるが、これらのことを「アプリケーション」とは呼ばない。OSが提供する機能を利用して(例えば、ウィンドウ枠の描画など)、その上で動作するプログラム――例えば、メモ帳やExcelなど、ユーザーに対して何らかの機能を提供するひとまとまりのプログラム――のことを「アプリケーション」と呼ぶ。プログラムとは、コンピューター(ハードウェア)上で動作する何か(ソフトウェア)を包括した表現であり、そこにはOSやライブラリ、アプリケーションなどが含まれると考えておくとよいだろう。
また、開発者にとっては、プログラムを開発し、それをアプリケーションとしてまとめあげて、ユーザーに提供する、というイメージになる。
ひとえに「アプリケーション」といっても、さまざまな種類がある。例えば先ほど例として図9に挙げたアプリケーションは、何度も説明しているように「Webアプリ」という種類になる。図10に代表的なアプリケーションの種類を示す。
*4 ユーザーが使うものではないので、「アプリケーション」というよりも「プログラム群」という呼ぶ方が適切だろう。実際、「アプリ」という単語は付けられず、単に「バッチ処理」と呼ばれることが多い。
AIは、基本的にバッチ処理のプログラムとして開発する。バッチ処理は、主にターミナル(Windowsではコマンドプロンプト)から呼び出す、GUIなしのプログラムである。開発者が手動で呼び出したり、(コマンドプロンプトなどを使用せずにOSの機能を利用して)決められた時間にスケジュール実行したりする。
また、AIを何らかのサービスとしてユーザーに使わせたい場合は、Webアプリとして提供することが多い。さらに、スマートフォン向けなどでは、GUIアプリ(ネイティブアプリ)として提供する場合もある。
AIのプログラムを作るにはPython言語を用いる、とLesson 1ですでに説明した。では、AIのプログラムやアプリケーションは、ゼロからPython言語だけで開発しなければならないかというと、そうではない。既存のライブラリやフレームワーク、APIというものが使える。そこで、それぞれどういうものかを説明しよう。ちなみにこれらも、大枠としてはプログラムに含まれると言えるだろう。
ライブラリ
まずライブラリ(Library)は、さまざまなプログラムで共通に利用できる機能をまとめて提供するものだ。ライブラリが提供する機能を使って、開発者はそれぞれに独自のプログラムを組み上げていくことになる。例えばPythonにはディープラーニング用の機能を提供するTensorFlowというライブラリ(図11)がある。開発者は、ディープラーニング用の機能を自分でゼロから作るところから始めるのではなく、このライブラリが提供するディープラーニング用の機能を活用することで、AIプログラムを非常に簡単に作れるようになる。
『初めてのニューラルネットワーク&ディープラーニング実装(TensorFlow 2+Keras(tf.keras)入門)』では、このTensorFlowというライブラリを使用する。
ちなみにPythonでは、ライブラリはパッケージ(Package)という形態で提供される。PyPIというパッケージ管理サイトを通じて、世界中で開発されたライブラリを簡単にインポートできる。詳しくは『機械学習&ディープラーニング入門(Python編)』で説明する。
フレームワーク
次にフレームワーク(Framework)であるが、これは「さまざまなプログラムで共通に利用できる機能を提供」するライブラリの一種で、特にアプリケーションを開発するための「ひな型」や「基本機能」を補助・提供するという特徴がある。例えばPythonでWebアプリを作る場合、Flaskというフレームワーク(図12)を使うことで、Webアプリの基本機能はFlaskが補助・提供してくれるので、あとは必要な部分だけコードを書けばよくなる。フレームワークを使えば、アプリケーション開発が格段に楽になる。
先ほど説明したライブラリ「TensorFlow」も、ディープラーニングのプログラムの基本機能を補助・提供するものでもあるので、「フレームワーク」と見なすこともできる。
API
最後のAPI(Application Programming Interface)とは、ライブラリや、フレームワーク、システム(=OSなど、何らかの実行エンジン)などが持つ各種機能を、(主にアプリケーションの)プログラミング用に提供するインターフェース(=接続点)のことを指す(図13はその概念図)。例えばライブラリ「TensorFlow」が持つ何らかの機能を自作のPythonプログラムで使いたい場合、APIという接続点を経由して、その機能を呼び出すことになる。
誤解を恐れずに平たく言うと、APIとは「ライブラリやフレームワークの使い方」と同じような意味に結果的になる。
通常であれば、ライブラリやフレームワークの使い方(=API)は1種類と考えるだろう。しかし、ものによっては、使い方(=API)が何種類も用意されている場合がある。
よくあるのが、使う際の難易度、つまりレベル(Level:水準)別に使い方(=API)を分けて提供するパターンだ。例えばライブラリ「TensorFlow」も、レベル別に複数の使い方(=API)が用意されている(図14)。
レベルをざっくりと2種類に分類すると、次のような特徴がある。
この説明だと分かりづらいかもしれないので、例を挙げよう。「歩く」という機能の使い方(=API)が高レベルと低レベルの2種類で提供される場合、例えば次のような機能で提供されることが考えられる。
この2種類のAPIを実際に使うところを想像してみよう。
どう考えても、高レベルAPIの方が短くシンプルなので、使うのが簡単そうである。通常はこちらを使いたくなるだろう。
一方、低レベルAPIの方が複雑で長いので、使うのが面倒そうである。当然、書くコードもこちらが長くなるので、「使いたくない」と思うかもしれない。しかしメリットもある。例えば「手を振る(右手のみを、左右に)」といったように、細かなカスタマイズが低レベルAPIでは可能になる。
よって、基本的な使い方をしたい場合は高レベルAPIを、特殊な独自の使い方をしたい場合は低レベルAPIを使う、という使い分けになる。
ちなみに、図14で示したTensorFlowの例では、特に高レベルAPIが複数用意されているのが分かる。ライブラリ「TensorFlow」が、具体的にどのようなレベルのAPIを提供していて、どれを使えばよいか、どう使い分ければいいか、については、『初めてのニューラルネットワーク&ディープラーニング実装(TensorFlow 2+Keras(tf.keras)入門)』であらためて説明する。
以上、アプリケーションと開発の基礎の基礎を紹介した。次回はまとめとして、これまでの3回分のLessonのポイントを、箇条書きで短く再確認する。
Copyright© Digital Advantage Corp. All Rights Reserved.