連載
» 2018年12月18日 05時00分 公開

機械学習&ディープラーニング入門(コンピューター概論編):Lesson 3 ディープラーニングを始めるための、アプリケーションと開発の基礎

ディープラーニングのプログラムはどのようにして作るのか? プログラムに関連するライブラリやフレームワークといった周辺知識を説明する。

[一色政彦,デジタルアドバンテージ]
「機械学習&ディープラーニング入門(コンピューター概論編)」のインデックス

連載目次

ご注意:本記事は、@IT/Deep Insider編集部(デジタルアドバンテージ社)が「deepinsider.jp」というサイトから、内容を改変することなく、そのまま「@IT」へと転載したものです。このため用字用語の統一ルールなどは@ITのそれとは一致しません。あらかじめご了承ください。

 前回はコンピューターの基礎の基礎を紹介した。今回は、アプリケーションと開発の基礎の基礎を紹介する。脚注や図の番号は前回からの続き番号としている。

「アプリケーション」と「開発」の基礎

 今回は、プログラムを作る側の視点で、プログラムについてもう少し掘り下げて説明しておこう。

 ちなみにプログラムを作ることを「開発」(Development)と呼び、作る側の人は「開発者」(Developer、デベロッパー)、使う側の人は「ユーザー」(User)と呼ぶ。

アプリケーションとは?

 例えば「Chrome」などのWebブラウザーがある。これは、確かにここまでに説明してきたプログラムの一種ではあるが、一般的には「プログラム」ではなく「ソフト」や「アプリケーション」と呼んでいるではないだろうか(「アプリケーション」は最近では、スマートフォン向けの「アプリ」の影響で「アプリ」とも呼ぶのが一般的だ)。

 では、プログラムとアプリケーションは何が違うのだろうか?

 アプリケーションApplication)は、何らかの目的を達成するために「メインプログラムとその支援機能をまとめたもの」のことである。例えばLesson 1で示したWebアプリ「ニューラルネットワーク Playground - Deep Insider」について見てみよう(図1)。

Webアプリ「ニューラルネットワーク Playground - Deep Insider」(再掲) 図1 Webアプリ「ニューラルネットワーク Playground - Deep Insider」(再掲)

 このWebアプリは、「Playgroundの本体機能を実現するメインプログラム」だけではなく、「グラフ描画機能を提供するD3.jsという支援機能(厳密には、後述するライブラリ)」や「Webページのデザインを提供するMaterial Design Liteという支援機能(厳密には、後述するライブラリ)」が組み合わさって出来たものである(図9)。

アプリケーションとプログラム 図9 アプリケーションとプログラム

 もう少し言うと、ユーザーにとっては、アプリケーション内の個別のプログラムを使うというよりも、アプリケーションというひとまとまりのものを使う、というイメージになる。

 もう1つ例を出そう。WindowsやmacOSといったOSも「プログラム」であるが、これらのことを「アプリケーション」とは呼ばない。OSが提供する機能を利用して(例えば、ウィンドウ枠の描画など)、その上で動作するプログラム――例えば、メモ帳やExcelなど、ユーザーに対して何らかの機能を提供するひとまとまりのプログラム――のことを「アプリケーション」と呼ぶ。プログラムとは、コンピューター(ハードウェア)上で動作する何か(ソフトウェア)を包括した表現であり、そこにはOSやライブラリ、アプリケーションなどが含まれると考えておくとよいだろう。

 また、開発者にとっては、プログラムを開発し、それをアプリケーションとしてまとめあげて、ユーザーに提供する、というイメージになる。

アプリケーションの種類・形態

 ひとえに「アプリケーション」といっても、さまざまな種類がある。例えば先ほど例として図9に挙げたアプリケーションは、何度も説明しているように「Webアプリ」という種類になる。図10に代表的なアプリケーションの種類を示す。

代表的なアプリケーション種別 図10 代表的なアプリケーション種別

  • GUIアプリ: Windows OS上では「Windowsアプリ」とも呼ばれている。例えば表計算ソフトのExcelはGUIアプリの一種
  • Webアプリ: Webページの形態で提供されるアプリ。例えば、検索サービスを提供する「Google検索」はWebアプリの一種
  • バッチ処理: まとめて実行したい処理を記述したプログラム群*4のこと。例えば、真夜中にOSを最新版に自動更新する「Windows Update」はバッチ処理の一種

*4 ユーザーが使うものではないので、「アプリケーション」というよりも「プログラム群」という呼ぶ方が適切だろう。実際、「アプリ」という単語は付けられず、単に「バッチ処理」と呼ばれることが多い。


 AIは、基本的にバッチ処理のプログラムとして開発する。バッチ処理は、主にターミナル(Windowsではコマンドプロンプト)から呼び出す、GUIなしのプログラムである。開発者が手動で呼び出したり、(コマンドプロンプトなどを使用せずにOSの機能を利用して)決められた時間にスケジュール実行したりする。

 また、AIを何らかのサービスとしてユーザーに使わせたい場合は、Webアプリとして提供することが多い。さらに、スマートフォン向けなどでは、GUIアプリ(ネイティブアプリ)として提供する場合もある。

プログラムやアプリケーションの作成時に利用できるもの

 AIのプログラムを作るにはPython言語を用いる、とLesson 1ですでに説明した。では、AIのプログラムやアプリケーションは、ゼロからPython言語だけで開発しなければならないかというと、そうではない。既存のライブラリやフレームワーク、APIというものが使える。そこで、それぞれどういうものかを説明しよう。ちなみにこれらも、大枠としてはプログラムに含まれると言えるだろう。

ライブラリ

 まずライブラリLibrary)は、さまざまなプログラムで共通に利用できる機能をまとめて提供するものだ。ライブラリが提供する機能を使って、開発者はそれぞれに独自のプログラムを組み上げていくことになる。例えばPythonにはディープラーニング用の機能を提供するTensorFlowというライブラリ(図11)がある。開発者は、ディープラーニング用の機能を自分でゼロから作るところから始めるのではなく、このライブラリが提供するディープラーニング用の機能を活用することで、AIプログラムを非常に簡単に作れるようになる。

ディープラーニング用ライブラリの例「TensorFlow」 図11 ディープラーニング用ライブラリの例「TensorFlow」

 『初めてのニューラルネットワーク&ディープラーニング実装(TensorFlow 2+Keras(tf.keras)入門)』では、このTensorFlowというライブラリを使用する。

 ちなみにPythonでは、ライブラリはパッケージPackage)という形態で提供される。PyPIというパッケージ管理サイトを通じて、世界中で開発されたライブラリを簡単にインポートできる。詳しくは『機械学習&ディープラーニング入門(Python編)』(後日公開予定)で説明する。

フレームワーク

 次にフレームワークFramework)であるが、これは「さまざまなプログラムで共通に利用できる機能を提供」するライブラリの一種で、特にアプリケーションを開発するための「ひな型」や「基本機能」を補助・提供するという特徴がある。例えばPythonでWebアプリを作る場合、Flaskというフレームワーク(図12)を使うことで、Webアプリの基本機能はFlaskが補助・提供してくれるので、あとは必要な部分だけコードを書けばよくなる。フレームワークを使えば、アプリケーション開発が格段に楽になる。

Webアプリ用フレームワークの例「Flask」 図12 Webアプリ用フレームワークの例「Flask」

 先ほど説明したライブラリ「TensorFlow」も、ディープラーニングのプログラムの基本機能を補助・提供するものでもあるので、「フレームワーク」と見なすこともできる。

API

 最後のAPI(Application Programming Interface)とは、ライブラリや、フレームワーク、システム(=OSなど、何らかの実行エンジン)などが持つ各種機能を、(主にアプリケーションの)プログラミング用に提供するインターフェース(=接続点)のことを指す(図13はその概念図)。例えばライブラリ「TensorFlow」が持つ何らかの機能を自作のPythonプログラムで使いたい場合、APIという接続点を経由して、その機能を呼び出すことになる。

APIの概念図 図13 APIの概念図

 誤解を恐れずに平たく言うと、APIとは「ライブラリやフレームワークの使い方」と同じような意味に結果的になる。

さまざまなレベルのAPIが提供される場合も

 通常であれば、ライブラリやフレームワークの使い方(=API)は1種類と考えるだろう。しかし、ものによっては、使い方(=API)が何種類も用意されている場合がある。

 よくあるのが、使う際の難易度、つまりレベル(Level:水準)別に使い方(=API)を分けて提供するパターンだ。例えばライブラリ「TensorFlow」も、レベル別に複数の使い方(=API)が用意されている(図14)。

TensorFlowが提供する複数APIのレベル分布図 図14 TensorFlowが提供する複数APIのレベル分布図

 レベルをざっくりと2種類に分類すると、次のような特徴がある。

  • 高レベルAPI高水準API): 提供する機能が大ざっぱで、簡単に使えるが、細かい需要に応じること(カスタマイズ)は不得意
  • 低レベルAPI低水準API): 提供する機能が細かく、さまざなことが可能だが、いちいち指示せねばならず、使うのがやや面倒

 この説明だと分かりづらいかもしれないので、例を挙げよう。「歩く」という機能の使い方(=API)が高レベルと低レベルの2種類で提供される場合、例えば次のような機能で提供されることが考えられる。

  • 高レベルAPIの例:「歩く(時速4km)」と、1つの大ざっぱな性質+動作の機能で提供
  • 低レベルAPIの例:「時速=4km」「足を動かす(両足を、前後に)」「手を振る(両手を、前後に)」と、複数の細かい性質・動作の機能で提供

 この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.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。