1ヶ月ほど前にGoogleから公開されたTensorFlowですが、TensorFlow.orgのチュートリアルをひととおり試してみたものの、その本質的理解がなかなか進まずに自分独自の利用に歩みが進まないケースが散見されます。私も現在学習中なのですが、自分が前に進むうえで理解の整理に役に立ったことを共有します。「そんなことは知っている」という方もいらっしゃるとは思いますがご容赦ください。
TensorFlowの最初の利用方法紹介である「GET STARTED」では「y = 0.1 x + 0.3」という数式を使って生成したxとyを学習データとして、y = W x + b という数式のWとbを最適化していく事例が掲載されています(下記URL)。
https://www.tensorflow.org/versions/master/get_started/index.html
この事例はx, y, W, bという登場する値がすべてスカラー量なので概ね容易に理解できるのですが、このあとの事例で「ベクトル」「テンソル」という概念が出てくると少し混乱してきます。これは「ベクトル」は高校数学で登場するものの、「テンソル」といわれると理系の大学数学領域なので身構えてしまう方もいるようです。そこで、非常にざっくりとですが、「スカラー」「ベクトル」「テンソル」の違いを私たちの身の回りでの実例を使ってお話しします。
三次元空間に座標軸を取って、その上に1cm x 1cm x 1cmの消しゴムをおいたとします。つまり、消しゴムの中のゴム粒が三次元の座標を使って(x, y, z)=(0, 0.1, 0.5)のように位置が特定できる状態です。この消しゴムを上から「むにゅむにゅ」と指で押したり指を離したり繰り返したとします。ある瞬間で時間を止めたとします。消しゴムの中のあるゴム粒に着目すると、ゴム粒の大きさは「直径2ミリ」のように単一の数値で表せます。これがスカラーです。続いて、「むにゅむにゅ」により消しゴム全体はひしゃげているので消しゴム内ではそのゴム粒は上下に動こうとして速度を持っているはずです。速度はx方向とy方向それぞれの成分で表せる2次元のベクトルであり、そのゴム粒が持つ動くときの速度が「ベクトル」です。ゴム粒が決まれば速度が決まります。さて、ではこの場合の「テンソル」とは何か?消しゴムが上から指で押されているとき、内部のゴム粒にも力が伝わります。指が消しゴムを押すのと同じ方向には「圧縮」の力が働いているでしょう。しかし、指が押す向きと垂直な方向(消しゴムがむにゅっと広がってひしゃげて出っ張っている方向)には「膨張」の力がかかっているでしょう。このように、着目する方向or断面は3次元空間内での矢印の向きに呼応する3次元のベクトルであり、単一のゴム粒について着目する方向or断面をかえたときにそのベクトル(この場合はかかる力)が変化するものを「テンソル」といいます。表現する情報の要素数(次元)はそれぞれ異なるものの、これらは行列をつかって表現できます
TensorFlowでの機械学習では、コンピュータに学習させる情報を、各項目をひとつひとつの次元として扱います。すると、上記で述べたスカラーやベクトルやテンソルのように行列で表現できるのです。実際にはスカラーもベクトルもテンソルも次元が異なるだけで本質的には行列で表現できる仲間なので、総称してこれらを「テンソル」と呼びます。これがグーグルのMachine Learningに「TensorFlow」という名前が付いている背景と考えられます。
続編はこちらへ http://qiita.com/MATS_ELB/items/fec7f54de2dd18b043ae