「勉強会に行ってみた!」第34回 「【eLV勉強会】ICTを支える 「考え方」シリーズ:S01 数学の考え方(圏論編)」
event

「勉強会に行ってみた!」
第34回 「【eLV勉強会】ICTを支える
「考え方」シリーズ:S01 数学の考え方(圏論編)」

2016.08.30

このところ、数学の勉強会をちらほら見かけるようになりました。基礎である数学を学ぶことで、個別のIT技術の背景にある考え方を理解しようということでしょうか。

今回のテーマである圏論は、関数型言語の背景としても有名ですね。圏論の考え方とは、いったいどんな考え方なんでしょうか。

(三土たつお)

今回の勉強会は、株式会社CRE-COの運営するITエンジニアのための勉強会「eLV」:https://learningvesper.doorkeeper.jp/ の一貫です。

場所は同じくCRE-COの運営するイベントスペース「CO-CreationLABO」でした。

最初に、司会の冨元さんから勉強会の趣旨についての説明がありました。

■「今日の参加者が明日の講師であるようにしたい」

冨元さん

IPAの調査では「7割強のIT企業(無回答を除く)が、教育費は総人件費の1%未満です。一方で、国はITの教育については企業に助成金を出して企業任せです。」

つまり、企業は人材を教育する気がない、国は企業任せということだから、結局は個人任せってことだ。冨元さんは人材流動が当たり前となった時代の変化が主要因と考えているようで、そんな状況をなんとかしたいといいます。

「エンジニアが全員でレベルアップできるコミュニティを作りたい。今日のような勉強会にしても、今日の参加者が明日の講師であるようにしたい。講師が完璧である必要はない。アウトプットすること自体が大事だし、それが勉強になる。」

この点についてはほんとにそう思いました。未熟なうちはアウトプットできないという考え方をつきめると、夏目漱石以外は小説を書けないことになっちゃう。インプットしては未熟かもしれなくてもアウトプットする、を繰り返すことで成長するんだと思います。

さて、本題です。

講師の戸崎さん

今回の講師は、株式会社CRE-COの Learning Contents Director, Software Architect の戸崎さん。

戸崎さんの紹介ページ
http://www.elv.tokyo/mindsets

■計算の並行性が重要になってきている

いまなぜ圏論の考え方が重要なのか、その背景から話が始まりました。

「今は計算の並行性がとても重要な時代になっています。」

どうして並行性が重要か? それはムーアの法則の限界によって、スケールアップよりスケールアウトの時代になっていること、大量のデータを扱う必要が出るようになってきたこと、などがあります。

大量のデータを分散並列に扱う処理としては、例えばページランクの計算があります。これは MapReduce という方法でうまく扱える例です。

■数学の関数は、並行計算のためのよい性質を持つ

「MapReduceで並列処理がうまくいく理由は、計算中に既存の情報を更新しない、システムの状態を変化させないといった性質があるからです。」

この設計のもととなった「考え方」が、入力と出力の関係が不変であること、つまり参照透過性というやつですね。入力に対する出力がいつも同じということは、関数は静的なテーブルみたいなものだということです。

「数学の関数は、入力データと、出力データを対応させた、静的なテーブルがあるのと同じです」

たとえば、9時の4時間後は1時、みたいな計算は上の右のようなテーブルを静的に持っていればわかります。

■関数型言語は、ITの関数を数学の関数に近づけようとする

「しかし実際のICTシステムでは計算に時間がかかるため、たとえば計算中にテーブルが変更される可能性があります。ICT技術者は、この違いに折り合いをつけなければいけません。その実践として関数型プログラミングがあるのです。」

この勉強会では、関数型プログラミング言語の例として Haskell を使ったデモがたくさんありました。

たとえばこれは、さきほどの「時間の足し算」を Haskell で実装した例です。addTime x y とすると、xのy時間後が求まります。そして実は、このとても単純な関数が、ラムダ、群論、圏論、モノイド、ファンクタ、モナドといったものの説明につながります。

そして、本日のポイントはこれです。

圏論とは、矢印(→)を使って数学のさまざまな対象を統一して考えようとする理論であり、関数型言語、特に Haskell はそれを応用して作られています。

■圏論の考え方とはなにか

とりあえず圏論の構成要素です。対象の集まりと、それらをむすぶ矢印(マップ)、それと矢印の合成。基本的にはこれだけです。ただし、矢印の合成については恒等律と結合律を満たすというルールがあります。

具体例を見てみましょう。

圏の定義を満たす具体的なものとして「Hask圏」があります。対象はHaskellのデータ型、矢印はHaskellの関数、矢印の合成は、関数の合成です。関数を合成したものはやっぱり関数だ(推移律)みたいなことを順に確認していくと、確かに圏になっていることがわかります。

で、こういう圏論を使って考えるとなにが嬉しいんでしょうか? 具体例として出てきたのは、なんとiPS細胞の話でした。

細胞は、タンパク質を使って新たな細胞を生み出します。これを細胞A→細胞Bと表すことにすると、ES細胞→皮膚幹細胞→皮膚細胞、みたいな上流から下流への流れが普通はあります。

ところで、iPS細胞は皮膚細胞のようなふつうの細胞からES細胞のような幹細胞を作るというものでした。つまり、皮膚細胞→ES細胞のように上流に戻る矢印です。

現実の世界で、上流に戻るような操作やタンパク質を発想するのはちょっと難しいことです。

でも圏論の世界で考えれば、それは単なる矢印です。結局、ある細胞をもとに矢印を合成した結果としてES細胞になる矢印を作ればいいんだ、ということになります。

「ICTの対象も、こんなふうに圏論の考え方で捉えると、既成概念にとらわれない、対象間の関係の新たな価値に気がつくかもしれません。」

最後に、モナドについても一応紹介しておきましょう。

モナドとは、自己関手と二つの自然変換で構成され、それらの間の結合律と単位元が存在するものです! といきなりいうと訳がわからないですが、本当はこの前に順を追った丁寧な説明や豊富なデモがあり、とてもすんなりと理解できました。

■「考え方」を勉強するとは?

今回の勉強会は「ICTを支える『考え方』シリーズ」の一つで、他にも統計の勉強会なんかもあるんだそうです。講師の戸崎さんはそのディレクターでもあるということで、改めて趣旨を伺ってみました。

ー どうして「考え方」についての勉強会を企画したんでしょうか?

「この勉強会のシリーズは、ICTを支える数々の専門分野において、パターン化され、実証されてきた、この分野ではこう考えるのが基本という「考え方」を、専門分野を横断して身につけることを目指しています。偏りや矛盾のない、システムを組み立てる力、これからのICT技術者にとって必要不可欠な力を養うシリーズとして、提案させていただきました。」

考え方にフォーカスした勉強会というのは珍しいと思います。でも、重要なのは個別の知識より考え方ですよね。それを知って応用できればいいわけですからね。

■まとめ

圏論というとむずかしいイメージがあるのですが、定義を一個ずつ追っていけば割合ふつうに理解できるものだな、と思いました。並行性が重要な時代になり、そのために関数型言語が重要になった。そしてその背後には数学の、とくに圏論の考え方があるんだということがよくわかりました。

今回行った勉強会:「【eLV勉強会】ICTを支える「考え方」シリーズ:S01 数学の考え方(圏論編)」
http://www.elv.tokyo/mindsets

原稿:三土たつお
1976年生まれ。プログラマー、ライター。プログラマーとしてはふだんPHPを書いています。ライターとしてはニフティのデイリーポータルZとかで書いています。
著書に「街角図鑑」(実業之日本社)など。
http://mitsuchi.net/

この記事はどうでしたか?

おすすめの記事

キャリアを考える

BACK TO TOP ∧

FOLLOW