ブルーマウンテン珈琲は遺伝的アルゴリズムで淹れる

私はブルーマウンテン珈琲が一番好きだ。何十年も前に喫茶店で初めて飲んだブルーマウンテン珈琲のおいしさに感動してからずっと好きだ。あの味を再現するために試行錯誤して淹れているのだが未だに満足できる味と香りにならない。珈琲淹れは難しい。パラメーターは以下の通り。

  • 珈琲豆 100g 500円から2500円までいろいろある。もちろんブレンドではなく100%ブルマン
  • 焙煎 変更したいが家に機材がないのでこれは豆屋さん任せ
  • 挽き方 ミルの粗さつまみが30段階くらい変えられる
  • 粉とお湯の割合 12gで180ccが基本だけど、粉の量を18gまで増やすことができる
  • 一度に入れる量 12g(一杯分)から36g(三杯分)
  • フィルター 紙フィルターが2種。ステンレスフィルターが1種
  • お湯の温度 85℃から90℃

これらのパラメータを総当たりで試すと

5×30×7×3×3×2=18900

1日4回飲むから4回試行できる。すると全部を試すのに

18900÷4=4725日=13年

かかる。ブルマン以外の豆も飲んでいるから実際はもっとかかる。これでは死ぬまでに求める味を見つけ出すのは絶望的だ。喫茶店のマスターは短期間に美味しい珈琲を淹れる技を身に着けているのだからすごい。まさに職人だ。素人の私が総当たりではなく最適解を見つけ出すためには遺伝的アルゴリズムを使うという手がある。これはディープラーニングのハイパーパラメータの最適化をするときに覚えた。これを使えば時間を短縮できる。なんとか生きている間に美味しいブルーマウンテン珈琲を飲みたい。

ただし、悲しい情報もある。今はもうブルーマウンテン珈琲をおいしく飲むことはできないかもしれないのだ。なんでも昔はブルーマウンテンの豆を洗うのにジャマイカのおばちゃんがおしゃべりしながらだらだら洗っていた。それが今は機械で洗っている。本当かどうかは分からないが機械で洗うとおいしくなくなるのだとか。それが本当だとしたら、昔の味を再現することはもうできないかもしれない。何でも機械化するのはよくないという良い例だ。あとは自然災害。2012年10月にジャマイカを襲ったハリケーン「サンディ」により、多くのコーヒーの木が倒れるなどの被害を受けた。2013年、コーヒーの葉の光合成機能を奪い2~3年で枯らしてしまう、強い伝染力をもつ「さび病」と、コーヒーの実に入り込んで卵を産みふ化した幼虫が種子を食べてしまうコーヒーベリーボーラーの病虫害の被害が発生した。ブルーマウンテンの木が減ってしまったのだ。その中から選別するおいしい豆の絶対量も減っている。ブルーマウンテンを取り巻く環境はとても厳しい。おいしいブルーマウンテン珈琲を飲める日が来るのだろうか。

 

TMS320C30の思い出

1980年代の終わりにとある大学のプロジェクトに参加した.10人くらいのプロジェクトでとあるシステムを研究開発していた.私はメカエンジニアとして参加したのだが,プロジェクトのメンバーのレベルの低さに唖然としたことを覚えている.システム制御にはTIのプロセッサ(当時はDSPと呼んでいた)TMS320C30を採用していた.ソフト担当者がこれのファームウェアを書いていたのだがCコンパイラを使っていた.DSPなんだからアセンブラで書けよと思ったが,それは大した問題ではない.びっくりしたのは「高速化」と称して計算をすべて整数で行っていたのだ.おいおい,TMS320C30をなぜ選んだんだ.TMS320C30は32ビット浮動小数点の積和を1クロックで出来るのが売りの最新鋭DSPだよ.整数の演算も1クロックだ.わざわざ実数を整数へ変換して計算するメリットなどない.桁あふれや丸め誤差が出て却ってマイナスだ.そのことを説明したが誰も分からなかった.TMS320C30を選んだのは「いちばん高いからいちばん性能が良いと思った」からだ.ああ,税金の無駄遣い.というよりこんな連中に給料払っているのが税金の無駄遣い.こんなんに教わる生徒は気の毒だ.

その後,私がシステムの改良をすることになって(なぜメカエンジニアがソフト書かなきゃならないのとは思ったが),ファームはアセンブラで書き直した.もちろん分岐命令は遅延分岐を使った.性能が一桁上がった.過剰性能になったので,次のバージョンではDSPを固定小数点のTMS320C50に変えた.コストが一桁下がった.この件で自動車メーカーでエンジン制御のCPUプログラム書いてる人の方が大学の先生より頭が良いことが分かった.最近のディープラーニングの(アプリの方ね)研究をしている連中はなんとなくこのときの大学の先生と同じ香りがする.

nVidiaせこいよ!

CUDAを使う場合,最新のCUDAはCC(=ComputeCapability)が大きいカード(新しいカード)でないと使えない.deep learningのフレームワークの最新バージョンは最新のCUDAで動くように作られる.古いCUDAでは動かない。最新のCUDAを使いたかったら古いCUDA用の古いビデオカードを外してCCの大きい新しいビデオカードを付けるしかない.普通にソフトウェアを作る人だったらソフトがバージョンアップしても古いカードでも動くように工夫するはずだ.ところがCUDAを作っている奴はそれをしない.たぶんわざとそうしている.古いカードを廃棄して,新しいカードを買ってくれた方がnVidiaが儲かるからだ.せこいよ.マイクロソフトよりせこい.せこい奴は嫌いなので私はCUDAは使わないことにした.自分でFPGAでアクセラレータを作るよ.学習用アクセラレータを作るのはとても難しいけれど,せこい奴を利するくらいなら困難に挑戦する.

Neural Network Console分かりやすい!

SONYのNeural Network Consoleで添付されていたプロジェクトsemi_supervised_learning_VATを動かした.VATというのはVirtual Adversarial Trainingのことだ.VATは説明を読んでも良く分からなかったが,ConsoleのEDITタブで計算グラフを見たら分かった.なんと分かりやすい.すごいよSONY.

Core2Quadが役立った

SONYのNeural Network Consoleを動かすのにWindows10かWindows8.1が必要だが,職場にWindows8以上のマシンは1台しかない.Core2Quad 2.4GHz,メモリ4GBの古いマシンだ.i7を積んだハイスペックマシンはlinuxかWindows7で動いている.このマシンではメモリが足りないかなと思ったがにNeural Network Consoleをインストールしてみた.試してみるとメモリ不足を訴えることもなく動きだした.テンプレートとして入っていたニューラルネットワークは何とか耐えられるスピードで動いた(学習).MNISTの文字認識だからそんなに重くはない.Core2Quadのマシンが今になって役立つとは思わなかった.

nnablaのdockerイメージを作る

sonyのnnablaを使おうと,git cloneをしたのだが,引っ張ってきたのがDockerfileというテキストファイル.dockerイメージを作るためのスクリプトが書いてあるようだが,どうやって使うの?いろいろ調べるとdocker buildコマンドを使えば良いことが分かった

docker build -t local/nnabla-ext-cuda:tutorial -f tutorial/Dockerfile ../

とやってみると動いた.

Neural Network Console

SONYがまた面白いものを開発した.アプリなのでWindows8.1かWindows10が必要だ.Windows10が初めて役に立つかも.これまではWindows7の亜種としての意味しかなかった.そのWindows7もWindows2000の亜種でしかなかったが.

Consoleがあればライブラリを使ってpythonで記述する必要はないように思う.ライブラリもなかなか良くできていて,これさえあればChainerやTensorFlowなんて要らないと思う.

ディープラーニングの限界

ディープラーニングが流行っている.私もその流行に乗っているが,ディープラーニングを使った人工知能?は全然脅威ではない.ディープラーニングでは,教師データがない問題や報酬値を算出できない問題は本質的に解けないからだ.人間の天才が行う発見や発明は,ディープラーニングがどんなに発達してもできない.人間は安心して発見,発明すれば良い.

人工知能学会誌面白い

図書館で書架の間をぶらぶらしていて見つけた.人工知能学会なんてあったんだ.知らなかった.最近はディープラーニングが流行っているので関心のある人も多いだろう.1冊借りてきて読んでみた.平易な文章で面白い.また面白い雑誌を見つけてしまった.

特にVol.31 No.2 p169-179の岡谷教授のCNNに関する論文は秀逸.永久保存版だ.

googleのNNチップTPUは2006年から始まった

googleもニューラルネットには2012年以前から興味を持っていたようだ.先見の明だな.しかし,チップの開発が加速したのは2013年から.やっぱりヒントン教授の成果に後押しされたようだ.googleのチップはTPUという.最初に作られたTPUは推論しかできなかった.まあ,そうだよね.学習を低ビットでやるのは面倒な理論が要るからね.第二世代のTPUは学習もできるようになったとか.