ラベル 雑感 の投稿を表示しています。 すべての投稿を表示
ラベル 雑感 の投稿を表示しています。 すべての投稿を表示

2014年9月12日金曜日

参加出来るオープンソースプロジェクトを探す3つの方法

オープンソースプロジェクトに参加することはプログラマの楽しみであり、社会貢献であり、確かな実績にもなります。

メジャーなオープンソースプロジェクト・団体の名前を上げるならば、GNU, Linux, Mozilla, Ruby, Python, Boost....毎日使っているオープンソースだけでもいくらでもあるでしょう。ただし、概してこれらのプロジェクトに貢献することは非常に大きな傾注を要します。例えばEmacsやLinuxカーネルへの参加は最も優れたプログラマしか許されず、怪しいコードを書くと袋叩きにあうなどという話があります。袋叩きは冗談としても、そのようなインパクトの非常に大きいコードを書くということは簡単に出来ることではありません。

オープンソースへの貢献が非常にハードルの高いものだと思っている方は先のLinuxカーネルの例を良く出します。しかしオープンソースというのは五万とあり、貢献の機会や方法はいくらでもあります。

しかし、五万とあるプロジェクトからどれにコミットすべきなのか、どのようなプロジェクトがあるのか分からないというのが本音でしょう。以下、そんな行き場のない熱意を持ったプログラマの為の指針を紹介します。



1. 既に使っているオープンソースに貢献する

これが出来れば万々歳ですね。使っているうちに、不便な所や、バグを発見したり、あるいは日本語のドキュメントが不足しているなぁと感じることがあると思います。

機能を足して行くタイプのプロジェクトならどんどんパッチを書いていけるし、バグの発見はそれだけで評価されることでしょう。issueに症状を書いて、こういう原因じゃないかと推測し、あわよくばパッチ案を出せれば完璧でしょう。そこまでじゃなくても、バグについて説明があるだけでプロジェクトとしては大きな前進です。

日本語化というのは重要な貢献だと思います。ローカライズというのはどのプロジェクトでも困るものです。概してローカライズの効果は非常に大きいです。英語は共通言語ですが、母国語が英語である人が殆どという訳では全くありません。プロジェクトに依りますが、ローカライズするしないで製作物の影響する範囲は全く異なります。しかし、ローカライズはその言語を母語などにしている人が必要であり、そしてそのクオリティはプロジェクトの運営者には(その人の母語でない限り)分かりません。そうするとローカライズは限られた人しか出来ず、かつ泥臭い作業だけでなく運営部分まで関わることが出来ます。そういう意味でローカライズは価値が大きいです。


2. 日本発のプロジェクトに貢献する

日本発のプロジェクトはドキュメントが英語化されていなかったりするので人の出入りが少ないことがあります。人手が少ないプロジェクトへの参加は当然ありがたがられるし、パッチを当てる機会も多いでしょう。オープンソースというと国籍は関係ない、という話はありますが、実際日本人にとっては日本のプロジェクトの方がやりやすいことは多いと思いますし、ローカライズの重要性は誰もが知っていることでしょう。
やや古いですが、日本のオープンソースという記事があります。ここから探すのも手でしょう。あと有名なのはenchant.jsでしょうか。

3. スタートアッププロジェクトに貢献する

まだ1.0に到達していないプロジェクトもあります。未完成なのでやるべきことは沢山あります。かつ、歴史が短いので参加者も少ないです。ではスタートアッププロジェクトはどうやって見つければいいのでしょうか。プロジェクトのメンバーは様々な所で宣伝して、人を集めているはずです。アンテナを高く張っていればそれを見つけることもできるでしょう。或いはGitHubで検索してみるのも手です

  star:"100..500"

のように検索すれば中規模のプロジェクトが沢山見つかります。また、GitHubは最近のコミットの頻度が表示されます。これを見れば、今まさに伸びてきているプロジェクトなのか、既に沈静化したプロジェクトなのかも判断することが出来ます。



改めて。オープンソースへの貢献=パッチのコミットと狭義に捉えるべきではないと思います。オープンソースにおける成功とは参加することである、と言います。

パッチが最も直截的な貢献のように思えますが、ドキュメントを書いたり、テストを書いたり、宣伝したり、プロジェクトを成立させる為の要素はいくらでもあります。特に職人気質なエンジニアはこういう努力をしたがらない傾向にあります。

恐らく、こういう良く見せる為の工夫というのに拘るというのはあまりアジアにある文化ではないのでしょう。そもそもオープンソースというのがアジアの文化にそぐわないものかもしれません。

泥臭い作業も重要な貢献です。それを無碍にされることはないでしょう。また、ドキュメントやテストを書くことは必ず次につながります。 パッチを書くための下準備であったり、コミュニティの雰囲気を知ったり。



とにかく何でもいいから参加する。コミュニケーションを取る。それがオープンソースにおける成功といいます。

2014年8月26日火曜日

写実性と存在感

土偶は人間を模した形をしているが、写実的な人間の形からは大きく離れている。人間を模しているが、写実的な人間の像を作ることを目的としていなかったのだろう。技術的な問題から美しい写実的な像を作ることは不可能だったかもしれないが、土偶のそれは写実性に興味のない造型であるだろう。しかし同時に、猿でもなく犬でも他の何者でもなく、人間を模したものであるという確信が持てるものだ。人間を象りながら、人間とある程度の距離を置いているのだ。


写実的な画像の描画が可能になった現代においても、多くのアニメは写実的ではない。やはりここで起きているのは技術的な問題ではないのだ。では何故アニメは写実性を持たないのだろうか。それは、存在感を持たせる為である。


存在感とは写実性に担保されるものではない。写実的であっても必ずしも存在感は得られない。むしろ、土偶やアニメといったものに存在感を与えるには写実性はむしろ有害であるだろう。土偶は偶像である。豊穣や子孫繁栄などを祈る為に崇拝したと言われている。いずれにしても、それは非日常にある存在である。土偶という精霊が「存在」するのは、その詳細を知り得ないからである。どのような姿形をしているのか、本当に豊穣をもたらすのか、そのようなことを知り得ないから存在する。アニメも同様の議論が成り立つ。詳細が「存在しない」からこそ、そこに存在感が現れるのだ。


もう一つの問題は、写実的であれば写実的であるほど、細部が要求されることである。より元となるものに近しい写像であるほど、小さな違いが大きな違和感になって現れる。この違和感とは存在感をかき消してしまうものである。

土偶やアニメが写実性をもたないのは、それによってのみ存在感があり得るからである。

2014年7月12日土曜日

人工知能と生物知能

 人工知能と生物知能は何が違うのだろうか。Turing は『Computing Machinery and Intelligence』(1950)において計算機が考えることが出来るかを議論することはあまりに無意味だと主張した。Turingは人工知能の定義を「そのシステムが人間であると人間が判定すること」としてTuring Testを提案した。これは外系からシステムを観察するという点で認識論的・機能論的な立場に立った定義であるだろう。ここで人間に知能があるという前提があることにも注意されたい。しかしながら、そもそも人間に知能があるということはどう解釈されるのだろうか。


1. Turing Test

そもそも知能はどう定義されるのだろうか。Turing TestはAlan Turingが1950年に提案した人工知能の判定方法である。方法としては、判定者である人間が隔離された場所にいる人間と機械のそれぞれと自然言語での対話を行う。この時機械は人間であるかのように振る舞う。判定者が人間と機械の区別が出来なかった場合にその機械はテストに合格し、人工知能として認められる。
 
 しかしながらこのテストは様々な反論がある。例えば知能があるとはとても言えないシステムも真と判定されるという問題もあった。有名なものだとEliza Chat Botがある。面白いのでぜひ触ってみてほしい。このElizaを、知能だと思われるだろうか。もっとも重要な反論としては、Turing Testは、機械が自意識や認知能力がなくても知能であると判定しまうことがある。ここで「自意識や認知能力がある」とはstrong AIの立場に依る反論である(John Rogers Searle, 1980)。Searleは『Minds, Brains and Programs』(1980)においてstrong AIの立場を以下のように定義している。

「…強いAIによれば、コンピュータは単なる道具ではなく、正しくプログラムされたコンピュータには精神が宿るとされる」

 weak AIはそれと対象的に、自意識や認知能力ではなく問題解決器として定義される。Searleは前述の著書において、中国語の部屋という思考実験でstrong AIを不可能と示した。



2. 中国語の部屋

 中国語を理解できない人間を部屋の中に閉じ込める。外部とは遮断されており、唯一のやりとりは紙切れの交換で行われる。外から入れられる紙には中国語の文章が書かれているが、被験者は中国語を理解出来ないので、彼にはセマンティクスを持ったものとして認識されない。彼の課題はこの中国語の文章(彼にとっては意味のない記号列)に新しい記号を加えて外に戻すということである。ある記号列に対してどのような記号を書くかは部屋に置かれたマニュアルに全て書かれてある。

 実は外の世界では、この紙切れは部屋の中の彼への「質問」であった。そして部屋の中からは「回答」が返ってくるのだ。質問を投げる外にいる人間は、「中には中国語を理解する人間がいる」と考える。しかし中にいる彼は中国語など分からず、ただただマニュアル通りに、理解もせず、しかし外にいる人間は「対話」をしているのだ。

 さて、この思考実験が何をもたらすかを考えよう。
 まずこの中国語の部屋は人工知能のメタファーである。即ちマニュアルがメモリにあるコードで、何も理解せずにマニュアル通りに行動する人間がプロセッサ、紙の交換がI/Oに当たる。如何に機械が知能を持って見えたとしても、プロセッサとメモリそれぞれに知能はなく、受動的に行動するのだからstrong AIは不可能であるとSearleは主張する。weak AIは外系(即ち部屋の外の質問者)から見て知能を持って見えるものを知能と定義するので、中国語の部屋はweak AIの定義からは知能であるといえる。Searleはこの議論を持って人工知能と人間の知能は区別されるという。しかしながら、中国語の部屋の議論は人間おいては生物の知能についても同様の言及をすることが出来るだろう。
 

3. 生物知能

 生物に知能はあるのだろうか。あるとして、それはどういうメカニズムで生まれるのだろうか。まず、知能とは、心理学及びその周辺分野の研究者52人による『Mainstream Science on Intelligence』において以下のように定義されている。

A very general mental capability that, among other things, involves the ability to reason, plan, solve problems, think abstractly, comprehend complex ideas, learn quickly and learn from experience. It is not merely book learning, a narrow academic skill, or test-taking smarts. Rather, it reflects a broader and deeper capability for comprehending our surroundings—"catching on," "making sense" of things, or "figuring out" what to do.

 この定義は記述的であるが人間の「知能」をよく表していると言えるだろう。(ここで知能とは心理学者らのそれであることに注意されたい。)さて、では生物一般にこのような特徴はあるのだろうか。例えば大腸菌に知能はあるのだろうか。上の定義と照らし合わせたとしても、大腸菌の個体に知能がなくても、大腸菌の個体群もしくは生態系は知能があると言えるだろう。生物は進化というメカニズムで知能を実装している。人間などの脊椎動物は相互作用のある細胞(例えばニューロン)を多く一個体に含むためその知能を個体ベースで持っているだけだと考えることが出来る。
 大腸菌から人間まで同じ位相の「知能」を持っているとして、それをどう理解することが出来るのだろうか。先ほどの『Mainstream Science on Intelligence』は実はTuring Testと同様、機能主義的定義である。即ち、生物の知能も中国語の部屋と同様の議論が可能である。生物は外界からの刺激(紙切れ)に対して応答するが、それは「賢い」形態・行動ではなくただマニュアルに沿っているだけなのだと主張出来るだろう。

 ちなみに、マニュアルをゲノムや遺伝子に仮定することが出来る。この場合マニュアルは外界からの刺激によって書き換わるといえる。しかしそれも受動的なプロセスで、部屋の人間に依拠する知能は認められないだろう。同様の議論がコンピュータでも言える。



結句

 生物の知能と人工知能は同じ議論の下でしか定義することが出来ない。中国語の部屋の議論はstrong AIに対するアンチテーゼであるというより、strong intelligence一般に対するアンチテーゼである。転じて、生物に知能があると仮定すると、人工知能も知能があると言えるだろう。Turing Testとは、「人間に知能があるならば機械にも知能がある」という主張と考える方が厳密であるだろう。

2014年4月28日月曜日

自動作曲所感

自動作曲ってどこまで可能なんでしょう。

今ある自動作曲というのもかなりのクオリティの「楽譜」を作ることができるようです。試したことのない方はこちらより試せます。

Orpheus

これらの、現状の自動作曲とは素晴らしい音楽をボタン一つで作製するというものではなく、簡単な音楽を簡単に作れるようにするというものです。

さて、とりあえず現状どんな用途がありますでしょうか。

上記のように簡単な音楽は本当にボタン一つで作れてしまいます。例えば面白いフリーゲームを作りたいけどBGMが作れないという時にはかなり便利だと思います。今まではフリー素材を使うしかなかったのに対して一応?オリジナルの曲を用意できます。

そういう意味で非常に意味のあるアプリケーションでしょう。一部の人しかできなかったことをオープンにするというのは気持ちのいいものです。

また、元々作曲をしているという人にも有用なもののようです。適当に作曲させて面白いフレーズが出てきたら自分の曲に使うことができます。

産業的なインパクトは結構大きくなっていくんじゃないでしょうか。だけれども「自動作曲」の名を冠するには大きな懸隔があるように思えます

…というのはクラシカルな音楽が好きな人間だけでしょうが、それでも言わせて下さい。

いまの自動作曲が単独でアートを作ることはないでしょう。アートというと表現するということですが自動作曲のアルゴリズムにそういうものはありません。(そもそもアルゴリズム単独でアートというのが可能なのか。)「元気な」とか「ロック」とかの指定は出来ますが。

CGにおける河口洋一郎先生のような方も出て来るかもしれません。しかしそれにはツールを設計するところまで含めてのプロセスになるでしょう。

また、作曲というのは音程とリズムだけではありません。そういう曲ももちろんいくらでもありますしそれらも音楽ですが、曲想や音色と切り離して音程・リズムがあるというのはちょっとしっくり来ません。現状このあたりは暫定的にツールが用意したパターンを引き出しているだけですが、これらもアルゴリズムで計算できないものでしょうか。

今の人工知能一般の限界として、人間が評価するものは人間の方がうまく作れるんでしょうね。将棋とかなら勝ち負けという与えられたルールがありますが、音楽において良い音楽というのを定式化するのは非常に難しいです。そもそも良い音楽を作るのが目的じゃないという人もいるでしょうし、うーん。

結局、クオリティを求める音楽は自動作曲をツールとして使っても人間が作ることになります。それでも万々歳ですがコンピュータの人としてはもう少し威張りたいものですね。


でもやっぱり、世界に一番インパクトを与えるアーティスト?というのは初音ミクになるでしょう。その初音ミクの楽曲に豊かさをもたらす技術というのはやはり偉大だと思います。

とりあえず10年後、どうなるか。