機械学習の勉強をしていると、Kerasというライブラリに行き当たります。これが何者なのか、なぜ必要なのかを理解するのに手間取ったので、書き留めておきます。端的に言えばプログラミングにおける"High-level"という単語の意味がわかれば一発で理解できるのですが、この理解に手間取りました。
無知を晒す記事ですが、私と同じく理解に戸惑った方がいたらお役に立てれば幸いです。
Kerasとは
Kerasは、公式サイト曰く、
Keras is a high-level neural networks API, written in Python and capable of running on top of either TensorFlow or Theano.
らしい。
TensorFlowかTheanoの上で動作するHigh-levelなニューラルネットワークAPIのライブラリ。
topとかHigh-levelとか、なんか上の方で作用するらしい。何がどう高いんだろう?
High-levelの意味
プログラミングの文脈におけるHigh-levelは、より抽象度の高い、とか、俯瞰的で広範的なとかそういう意味らしい。高水準言語の「高水準」もHigh-levelの訳語だそうです。(Wikipediaの該当ページより)
ちなみに私自身の不勉強を晒してしまいますが、高水準言語が何がどう高水準なのか私は今日まで正確には理解していませんでした。
High-levelのざっくりした意味
英語のできる方と情報系の方には当たり前のことかもしれませんが、上の説明ではわからなかったのでもう少し深くHigh-levelを説明してみます。
High-level, Low-levelを語るときに使われる用語は、抽象度abstractです。抽象の対義語は具体であり、Low-levelな言語やライブラリとは、具体的に記述できる言語やライブラリということです。
例えば、
hello_world.py
print("Hello, world!")
というコードがあります。このコードは、機械語よりもHigh-levelであり、より抽象的です。なぜなら、標準出力の定義とかASCIIコードとか具体的なことを何も気にせずに、"Hello, world!"という文字列を標準出力できるからです。
この一文を動作させるのに、Low-levelな部分では大量の0と1で具体的に計算されているはずです。
大量の0と1を全く気にせずに、抽象的にやりたいことを記述できるため、Pythonは高水準な言語に分類されます。
Keras(High-level)とThensorFlow(Low-level)の違いとは?
Kerasは、deep learningにおける諸々の式の意味を深く考えなくてもそれっぽくプログラミングできるため、High-levelです。
modelを作っていくつかの関数でパラメータを指定するだけで、それっぽくdeep learningしてくれます。(もちろん、使いこなすにはちゃんとした理解が必要ですが)
一方、ThensorFlowでは、諸々の処理を自分で記述します。具体的な記述が必要なためlow-levelです。
各々の式を意識して記述しないとちゃんとした深層学習はできません。
まとめ
- High-level: 人間に理解しやすく抽象的に記述することのできる道具。人間の言語に近く、機械語や数式をあまり理解していなくてもそれなりにプログラミングできる。
- Low-level: 機械語や数式に近い具体的な記述の必要な道具。本質的な理解がないとプログラミングできない。加えて、大きなものを作るのが大変。
Low-levelなものを組み合わせて、High-levelに記述できる道具を作り、それで大きなものを作る、というのがプログラミングの歴史のようです。
注意
High-levelな言語やライブラリはLow-levelな部分を隠してくれますが、実際に計算しているのは、Low-levelなプログラムです。ですから、High-levelなツールの上にあぐらを書かずにLow-levelなものを勉強しないと、効率や正確さ、その他諸々のパフォーマンスを追求することはできません。