解くsugarプログラムを、いきなりだが見てみよう。Y))これだけで、覆面算をやってくれる。これだけ見ると括弧だらけで、まるでLispみたいだと思うだろう。走らせてみて、どうなるか考えよう。sugarの次に、sugarファイルを書くだけだ。Y2aSATISFIABLEと出ているので、解が存在したことを知らせており、その後ろに書く変数の名前と値がペアになって表示されている。解が存在しないと、UNSATISFIABLEと表示され、変数の値は示されない。解があったからといって、唯一解である保証はない。この簡単なプログラムは説明不要と思うが、以下に説明を試みる。CSP)というのをご存知だろうか?まったく文字通りの意味で、たくさんの制約が与えられて、それらの制約を全部充たす(充足する)解を求める問題だ。Wikipediaへのリンク(制約充足問題)を示しておく。制約は、要請、必須条件とか、ルールという言葉に置き換えても良い。言葉で説明しているだけだと難しいが、実例があればわかりやすいので、1つ例をあげる。Y文字には0〜9の数字を入れます。同じ文字には同じ数字、異なる文字には異なる数字を入れます。最上位桁の文字には、0は入りません。例は覆面算であり、色々な制約(といっても小学生でも説明不要なような制約なんだが)があって、それらを全て満足するように文字に数字を当てはめる。各英大文字には、0〜9の数字が入る。同じ英大文字は同じ数字になり、異なる英大文字は異なる数字となる。最上位桁の数字は0にはならない。これをどうやって解こうか。条件をいちいち調べれば解けるはずだが、そんな面倒なことをプログラマがやるようではまずい。プログラマたるもの、横着でなければいけない。いうことで、条件だけ書けば解いてくれる便利なプログラムはないものかと以前探した時に見つけてつかったことがあるのが、sugarというものだ。昔使っていたのだが、最近また制約充足問題関連の話があって、使おうとしたら、パソコンから消滅していた。いうことで、まずはインストールだ。Solverに説明があるので、この通にやればインストールできる。実際にインストールしてみるには、SATソルバーMiniSatとSugarを導入の方が分かりやすい。sugarの実行ファイルはperlになっていて、その先頭部分をインストールした環境に合わせるようになっている。インストールしたものは、以下のように変更した。SATソルバーは色々世の中というか、世界には転がっているのだが、前回も使ったminisatを使うことにしたので、もちろんこれもインストールしておかないといけない。"/tmp/sugar$$";インストールが済んだら、とりあえず動かしてみよう。下にsugarのサンプルコードが入っている。q_87aこれは8クィーンで、8x8のチェス盤上に、どのクィーンも他のクィーンに取られない(利き筋にない)ように置く配置を求める問題である。答えは、各列の何マス目に置けば良いかを示している。sugarのプログラムnqueens-8.cspは以下であるが、説明は略す。ENDあ、長くなったので、SEND+MORE=MONEYを解くsugarのプログラムは次回に説明しよう。978-4-7741-9186-7Chainerの本が出ると、とりあえず入手するようにしている。Learningフレームワークで、これで書くと短くなるし分かりやすい。プログラムの柔軟性も高い。いうことで、応援しているのだが、なかなか本が出ないのだ。勉強が同時にできる入門書という雰囲気である。不思議な構成になっており、入門書という作りになっていない。個々の技術解説は、それなりにページを割いているわけなのだが、そこからプログラミングへの繋がりがどうにも悪いのだ。プログラムの解説は、メソッド単位とかで、かなり細かい単位にいきなり入ってしまう。プログラムの全体像がないまま、いきなり詳細に入ってしまうのだ。なってしまうしかないのではなかろうか。要するに、本書は、ディープラーニングの部品の説明で終わっている。本書は、ちょっと見ると300頁くらいありそうな厚さがあるのだが、実際は200頁で、紙がかなり厚い。個別技術については説明が詳しいところもあるのだが、全体を貫くような説明がされていないのが残念だ。ページ数の制約や、出版を急ぐ必要でもあったのだろうか?本書で使用されているソースコードは、GitHubに存在する。https://github.com/ghmagazine/chainerbookソースコードとメモはあるが、解説がある訳ではない。はやり、期待が大き過ぎたかな。した本が出るかどうかは、普及に大いに影響しよう。組み合わせ数学、組み合わせ爆発、離散数学という言葉を聞いたことがあるだろうか。最近は、ディープラーニング、機械学習という言葉がやたらに流行っていて、これこそが人工知能と思われていたりするようだ。人工知能とは、そんなに狭くはない。ディープラーニング、機械学習などが人工知能であることには違いないが、それ以外にも人工知能はいっぱい存在する。そもそも、何とか学習とかいうものは、十分な量の学習データが存在するとき機能するのだが、そもそもデータなどないけれど賢い解決方法はないか、何とかしたいという事柄、問題はいっぱいあって、それらも当然人工知能と呼ぶべきだ。高校数学でも順列・組合せが今もあるのだろうか。問題だけ見ると、なんだか問題のための問題、パズルと感じるものの、社会で必要としている数学と思われていないような気がする。組み合わせ的な作業というのは、とても面倒で、人手でするのは大変なものが多い。訪問先がたくさんあった場合、どの順番で回ってくるのが効率が良いか。(巡回セールスマン問題)試合の対戦はどのように組み合わせると、より公平になるか。倉庫や工場はどこに配置すればよいか。服を作るのに布をどう裁断すれば無駄が減るか。結婚のペアは、どの組み合わせが一番トラブルが減るか。コンテナ船の積み下ろし。学校の時間割をもっと簡単に作れないものか。Blueがカスパロフを破った。それから20年が経った。去年あたりから、将棋や囲碁も、人間よりプログラムの方が強いと認識されるようになった。2017年12月5日に、同じアルゴリズムで、チェス、将棋、囲碁がプレイできるものができたと。いつものように、DeepMind社からの発表である。今回の発表は、チェスも、将棋も、囲碁も、それぞれのゲームのルールなどを用意するだけで、同じアルゴリズムで(たぶん同じプログラムでかつ同じハードで)ゼロから学習して強くなってしまうことに成功したようだ。次のグラフは学習曲線を示している。(以下の論文より引用)チェスや将棋は数時間の学習で世界最強になり、囲碁でも数日で十分なのである。これについて紹介している論文がこれだ。Algorithm細かい理論や技術について書いているわけではなく、概要がざっと書いていて、最後にチェスの棋譜も載っている。チェスの棋譜については、論文で見るより、ネットで動画になったもの、さらに解説までついたものがいっぱいあるので、そちらを見た方がよいだろう。YouTubeにこんなのがある。Stockfishというのは、最強のチェスプログラム(だった)。ついての、楽しく分かりやすい説明がある。英語だが、このくらいは大丈夫かも。Work?論文の内容の解説はネットにいっぱい出ているようなので、ここでは省略する。それより、全然違う3つのゲームが、同じアルゴリズム、同じプログラムで学習して強くなってしまったことだ。大量の学習データがなくても、このようなゲームに関しては自己学習だけで最強になれることを示したのは大きい。ゲームは、同じプログラムで学習だけで強くなってしまうことができるのだろうか?ここまでできると、汎用人工知能に一歩前進は間違いないだろう。3000円(本体)深層学習の本というと、やたらに画像処理の本が多いのだが、深層学習の対象は相当広く、自然言語処理にも及んでいるのだが、なぜか本が少ない。思いながら、「深層学習+自然言語処理」という条件で探していて見つけたのがこの本だ。いうのとで、そもそも本自体がまだ少ない分野なので、中身をほとんど確認せずに入手してしまった。多く、今現在の深層学習による自然言語処理の状況を概観するにはとても良い本であった。技術を身に着けたり、勉強しようという場合には、なかなか大変な本である。ついて、ある程度の知識があることが前提になっているし、また1冊200頁程度で多数のことを紹介しようとしているので、丁寧な解説には全然なっていないのは紙面の制約でどうにもならないだろう。数式も結構出てくるのだが、とりあえずこの分野の状況が知りたかっただけなので、大部分の式は飛ばして読んだ。数式も説明の図も理解するには、かなり高いレベルの基礎知識が必要である。ここ数年で急に立ち上がった分野で、まだまだ問題だらけ、つまり研究分野としても若い分野でやることがいっぱいあるという感じである。言語処理は、そもそもデータを用意するのが大変だし、さらに結果が良いのか悪いのかの判定もあいまいな部分があり、画像処理などと比べると、とてもぼやっとしていると感じた。検索このアーカイブについてこのページには、2017年12月に書かれたブログ記事が新しい順に公開されています。前のアーカイブは2017年11月です。次のアーカイブは2018年1月です。最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。