(数値の設定はすごく適当です)。Aの場合、五手先を読むのに1億0240万0000盤面必要で、所要時間は約34秒です。Bの場合、五手先を読むのに2430万0000盤面必要で、所要時間は243秒です。所要時間は99420539259259時間です。所要時間は39858075000000時間です。30手読む場合は、Bが500倍の速度になります。65287649700231164383561643835616年かかるんだけどね。Bのほうが早指しは弱くて、長考は強いんです。実際はこんな単純な処理じゃないけど。実際10手先を読んでる頃には、1手目は3つくらいに絞り込んでます)。私はBが好きなんです。Aの方式って極論を言えば、単に総当り検索を作って、あとは速いマシンを用意してくださいってことじゃないですか。プログラマーはとは一体・・・みたいな感覚を覚えるから。話しにまとまりがないようですけど、今回はこれで終わり。してPCが修復されていないのですが...。対局は先手74飛の所から、コンピューターが激しく勝勢を主張し始めました。対して、糸谷竜王以外のほとんどの棋士はそこまでの点差はないだろう、との見解でした。大きく形成判断内容が乖離することがあります。局面思考の処理方法の問題です。ちなみに糸谷竜王は今回に関わらず「人間としての形成判断」と「ソフトとしての形成判断」をいつも切り分けて考えているふしがあるので、ソフトの判断に一概に反対はしなかったものと思います。(彼はいつもそうなので)。それと、私が知っている限りの全てのソフトが出す点数は、局面の有利度数ではないです。手を指す際の選別として数値の大小を取りたいだけで、「どの程度有利か」とはダイレクトに直結していません。150点の差はかなりの有利を作れている可能性があります。【これは局面の重みの差によります】なので、よく「300点差なら別に...」と言うような解説がありますが、あれは根本的なところで点数の意味を間違って解釈してます。何点だからどうだ、と言うような直接的な意味づけはされていません。人間とソフトでは形成評価の判断法が違うのはもちろんのこと、表現法も違います。根本的なところで「良いの定義自体」が違うことが多いです。人間が言う「やや有利」が、ソフトには+4000に見えることもあります。これはどちらかが間違ってるとかじゃなくて「良いの意味自体」が違うこともあると言うことです。山川さんと糸谷竜王のお話です。話の内容と言うよりは、話のジャンル的に、ですが。(話の内容は人工知能や哲学などの基礎の部分にも届かない表面的なものでした)。私は以前、人工知能についてほんの少し書いた事があります。作りたいわけではないと。自己の認識、心、自我(つまり内的要因)を基点とした外的要因の認識に興味を持ってるように見受けられました。糸谷さんの見識はおそらく深く、必ずしもそれに固執しない考えも強く伝わってきました。山川さんは、通常の理化学、すなわち外的要因から外的要因を理解(と言うより解析とその活用)を目的としてるように見受けられました。(外→外への興味)これは仕事も兼ねるのでそうなるのもやむなしと言うところなのでしょうか?私の場合は、外的要因から構築される内的要因について一番興味があります。(外→内への興味)これはなんの役に立つかと言うと、おそらく人工知能のうち「もっとも誰の役にも立たない」考え方です。これは、人工知能と言うより「人口生命」と言うジャンルに近くなる場合もあります。ちなみに内的要因による内的要因の考察、と言うのは原理上存在しません。(トートロジーのように、「ボール」を問う質問に対し「ボール」と回答され、理解したとみなす場合は別とします)。ゆう話は将棋と関係あるの?と言われると微妙なラインです。これは、人間が自分と言うものを理解していなくても将棋を覚える事ができるからです。将棋プログラミングとなると話は別です。人工知能を動かさなくてはならないからです。対する理解は必要ありませんが、その理解はプログラマー側が担保する必要があります)。将棋ソフトを作るとなるとなおさらです。扱う情報に煩雑性が帯びるほど、その整理に理論的な解釈、さらにそれをまとめる論理的な解釈が必要となります。将棋の場合「究極的には」煩雑性はないのですが、その扱う膨大な処理容量によりわざわざ「煩雑的な思考」を取らざるを得ない場合があります。その煩雑的な思考を使用する際たる将棋プレイヤーが「人間」です。「究極的な」総当り検索を基準にシンプルに問題を解決するように試みます。積極的に煩雑性を取り入れているようです。私の場合は、さらに煩雑的な思考を論理的整合をもって綺麗にまとめ、効率的に処理を進める考えを持っています。(この辺がプログラマーにとって手法が分かれるところであり、面白いところでもあると思っています)。それが人工知能と言う分野に直結するのです。研究することでもあります。論理的な仕組みを組み込むためには、それに対する理解、研究、解析が先に必要となるからです。仮に人間より高度な論理的能力を持った宇宙人がいたとしても、人間の論理とは形式的な整合性がとれないため人間には扱えません。論理とはヒトが自己にとって内的な合理性と整合性をとるために、内的に発生している形式なのです。(似たような話では、以前宇宙人は将棋と言うゲームを理解できないと言う話もしましたね)。意図的にと言うことは、その宇宙人や、人間が内的に発生させ続ける論理構造に対し、プログラマー側の理解がなければならないと言うことです。宇宙人なら、指し手の意味もある程度理解してくれるし、持将棋の指し分けももっと合理的にやってくれるでしょう、きっと。これが人工知能と哲学の結びつきです。究極的にシンプルなプログラムを作る場合はどうするのでしょうか。これは論理はほぼ必要なく、必要なのはひたすら理論です。bonanzaタイプを始め、多くの将棋ソフトはこれに近い物です。(なお完全なシンプルタイプはありません)本当の究極的なプログラムでは、プログラムと言うよりもハードウェアが問題を解決します。本当の意味で問題を解決出来るのは、理論上では唯一このプログラムのみです。プログラミングが最も簡略化され、プログラマーが実現しやすいのもこの手法です。資源を最も非合理的に消費するのもこのプログラムです。事実上、莫大な情報量を目の前に、それを完全に作動させる資源と時間は存在しません。単なるプログラマーの好みの問題です。処理速度を落とす引き換えに、それ以上に合理的手順を踏み、問題を早期に解決することを好みます。私のプログラムは人工知能と密接に関わりがあります。ところで、こんなに長く書いておいて外的要因から構築される内的要因の話はしませんでした。これは将棋には関係がないのですが、機会があれば書こうかな、と思います。第二局PCメイン機が壊れました。現在ほとんどのことが何もできません。いつ直るのか、本当に直るのかも見通しが付きません。同一のマザーボード、しかも内部のチップセットやBIOSまでもが同一のマザーボードを発見してこないと直りそうにありません。製造中止になってるマザーなので、日本中の中古屋に在庫を確認中です。マザーの内部シリアル番号まで合わせての問い合わせなので、嫌な顔されまくっております。あぁ、もうほんと最悪。電王戦は第二局が終了しました。ルールなどに関しては書かないようにします。(良い印象を受けなかったので)。実際の所、なぜそうゆうバグが発生したのかは分かりません。人のソフトがどうなってるのか、想像すら付かないことがあります。予想ですが、USIから送られてきた「現在盤面」までの生成過程で、Selene側でも「合法手」であるかどうかのチェックがおこなわれていたのではないでしょうか?ちなみに私のソフトでは、私はそれは無意味だと思っているので、やったことがないのです。Selene側の処理は分かりませんのが、私のソフトの仕組みを少しだけ書いてみようと思います。エンジンに対して対局の「初期局面」を送ってきます。加えて、現在局面に至るまでの指し手が添付されています。三点が分かるわけです。私のソフトの場合、この時点では深いことは考えずに、USIの言うとおりにガチャガチャガチャと現在局面を言われたとおりに組み立てて行きます。この時点で、エンジン側は、合法手であるかどうかの判断は付きません。将棋のルールさえ把握してませんし、駒の動き方も知りません。私のエンジンが知ってるのは、初期局面から現在局面に対しての組み立て方のみです。知っていても意味がないのです。エンジンはGUI側の命令に立て付くことは出来ないので。言われたとおりに駒の位置を動かすのみです。話はそれますが、もし、相手が非合法手を指していたとしても、勝ちを宣言することはおろか、エンジンはGUIに対し、抗議することさえ許されません。したがって、現在局面を作るまでの地図が、非合法であるか、合法であるかのチェックをするのは、エンジンにとって無駄な作業です。(もっとも私のソフトの場合、他の所で無駄なことをいっぱいやってます)。初手で52飛車(王手)の移動が記載されていた場合、28にある飛車を、52の位置に移動せねばなりません。それは将棋のルールでもなんでもなく、そう書いてあるからエンジンはそうしなければならないのです。言っても「普通は」バグがない限り、GUI側が将棋のルールを把握し、ジャッジするものなので、変な命令は送られて来ません。普通の将棋で言うところの、記録係や審判みたいな役目をすべてGUIが引き受けます。GUIがそうしろと言ってくるからには、GUIが正しいのです。抗議をする権利もないレベルで。(※現実上の問題では、GUIが変なことをやってくるなら、「エンジン作者の私自身」が「GUIの作者」に対して抗議します。「おたくのGUI、将棋のルール間違ってますよ」、と。話を戻して、それが終わると、現在の局面が完成します。Seleneは、このただの局面組み立ての時点で、駒の動き方をすでに知っていて、しかもそれを照合していたのでしょう。その時「角成らず」は、不必要との考えから、Salene側には合法手の一覧には加えられていなかったのでしょう。その結果、情報の辻褄が合わず、なんらかのバグが出てしまった・・・。言うことなのではないでしょうか。私のソフトは、この状態から将棋のルールの把握に入ります。駒の動きを教える際、若干厄介なのが、飛車と角、香車です。これ、駒単体では動ける位置を決めれないからです。飛角香に関してはそれはダメで、先に盤面全体の把握が必要で、それに沿って動ける位置が決まります。「合法手全部出しますよルーチン」に対して盤面を送りつけると、その盤面内の、全ての駒のその動ける位置がリストになって一気に返ってきます。無駄っぽい動きに関しては、盤面検索ルーチンで一括削除しています。私のプログラムでは、この時に合法手と、非合法手の切り分けがおこなわれます。飛車成りと、飛車成らずの両方の動きは認めますが、42桂成らずのような非合法手は削除されます。(削除と言うか、その手の存在を最初から発生させません)。検索の途中で打ち歩詰めが発見された際は、成らずの動きが解禁されます。以前、飛車を正しく動けないソフトが予選にエントリーされていて、しょうがないから、飛車は1マスずつしか動けない、と言う応急処置(?)を取っていたソフトがあるんですよね。世の中にはそうゆうバグ(?)もあるんだな、と言うお話でした。一年ぶりの更新でございます。見ましたので感想を書いて見ようと思いました。私はプログラマーですので、開発者側の視点で書くことが多いです。将棋についての解説や、私の見解も書きますが、間違ってたらすみません。将棋の感想ですが、Aperyは、指してにランダムを入れてるとのことですが、これは激しく裏目に出たと思います。指し手の特徴から言って「ソフト特有のわざと最善手を外した手加減の手」と言う印象をつよく受けました。それも一つではなく、いくつか感じました。それを感じたのは24手目の44角です。(これにより、先手は無条件で歩を突けました)どうもこれ、後手にとってはデメリットこそあれ、メリットがなかったようです。敗着なのかどうかは分かりませんが、大きな敗因の一つだと思います。指し手をランダムにすると言うことはどうゆうことなのかを少し書きましょう。ソフト自身が思った「最善ではない」と言う手をわざと指すと言うことです。これは、評価値による機械的な判断でおこなうことはとても難しいのです。現在のほぼ全てのソフトは、人間と違い「総合評価点」と言うだた「1点のみの基準」により指し手を決定するので、その内容については一切吟味できず、ソフト自身も意味が分かっていないのです。ランダムを採用する理由としては、一直線に決め打ちしない、と言うメリットがあります。これにより、毎回違った将棋が実現できます。「aもbも将棋として成立する」B「分かりにくいが、aは成立し、bはギリギリ成立しない」この時、Aの場合なら構わないのですが、Bの時ランダムでわざとbが選択される可能性があるのです。この時、人間はあらゆる基準や判断から。「AとB」を見分ける事が可能なことが多いです。逆にソフトは、「AとB」を見分けるすべをほとんど持ちません。これは「評価値」と言う「1点のみ」の基準から指し手を決めるので、人間のような「あらゆる基準」を持たないからです。(そう、ソフトはAとBの時点で見分けが付かないので、どこまでが定跡なのかな?と言う判断も付かず、ランダムのONとOFFを切り替えるタイミングを判断することも極めて難しいのです)。ランダムを多く採用すれば、わざと最善手と違う差し手を指し続けると言うことになります。定跡内の(Aの)選択のような、aでもbでもどっちでもいい、と言うならそれでいいのですが、ある程度戦いが近づいている中(Bのような状況の中)、わざと最善手と違う手を何度も指すのは、ソフトの形勢にとってかなりつらいことになります。私の見たところによると、今回の対局はそれが発生したように見えました。(Aperyの仕様は知らないので本当は違うのかもしれませんが、私にはそう見えました。ソフト特有のそうゆう手でした)。してランダムとは言え、こんなに強いソフトが悪手や疑問手を連発することがあるのでしょうか?その答えは「総当り基準」の検索法が大きく関わってきます。検索しきれないのが普通だからです。いやコンピューターが数億盤面も考えれば検索できるでしょ?って思う人も多いと思うかもしれませんが、純粋な総当り検索を採用すると、たった数億盤面程度では無理の極みです。100億でも無理です。言うよりそこまで行くと単純な総当り検索は99.9999%以上が無駄な処理と言わざるを得ません。完全な総当り検索10億盤面は、GPS最新版の3000万盤面検索より弱いです。GPSは激しく枝狩りされてますが、3000万でも無駄な検索の塊です)。「(人間から見て)わざと変な手指してもあんまり評価値さがらないじゃーん」と言うことになるのです。ソフト側は「じゃあランダムでちょっとくらい点の低い手指しても大丈夫だよねー」と言う事になるのです。これは人間の感覚で言うと、すぐ気づく場合が多いです。損を先延ばしにしようとしてるのが実感できるからです。人間はなんのために、どういう意味の手を指してるのか、と言うのを理解してから指します。「このままだとやられちゃうからなんとかしないと」と言う趣旨で指すのが人間です。具体的に損が実現する前の段階から「嫌な雰囲気、嫌な感覚」と言うのをビンビン感じるのです。点数が下がってないから大丈夫なもんは大丈夫、と言う理由で指し手を決めます。そこに将棋の内容や、指し手の内容に対する理解はないのです。これは、どちらが正しいのか、と言うのは実際には誰にもわかりません。ソフトにとっても人間にとっても「検索や読みの外側」だから、それは実際にはどうなるか分からないのです。「明確な検索(読み)で実現しない限りは一切判断出来ません」と言うスタイルを適用できるのがソフトなのです。これについて、どちらが将棋(指し手)にとっていいのかは、分かりません。言うより、コンピュータは大量処理を得意としているので、根本的な長所の違いの問題なのでしょう。指し手を考えるときは、自分の長所である得意な方法で指し手を考えるのが良いと言うことなのでしょう。時には人間が良い手を指すわけです。(手を見つけるまでの経路、そして良し悪しの基準が全然違うわけですね)。ちなみに、たんいt評価値の「1点基準」でしか考えられないことについては、現在のソフトの大きな弱点だと思っています。話は長くなりましたが、その「悪い癖」があからさまに出てしまったのが34手目の44角だったのではないだろうか、と思っています。28手目の65銀についてです。冷静に棋譜だけを見ると「あり得る手」のようです。一応将棋をしてない人にも説明すると、「指しにくい局面」と「将棋の優劣」は別にあります。この「指しやすい」と「指しにくい」はコンピューターにはあまりそうゆう概念はなく、どちらかと言うと人間特有の感覚です。先手は少々間違っても形勢はほぼ影響はない、しかし、後手は一つ間違うと形勢を大きく損ねる、だけど後手が正しく指すと全くの互角である。後手が綱渡りの連続を強いられたとします。人間の感覚だと「先手よし」です。「指しやすい」と「有利」を混同してしまうことがあると言うことです。(逆にソフトは「指しやすい」を基準に優劣の予測が出来ません)。人間同士でも、持ち時間の長い対局や、研究局面などでは、あまり惑わされることがないようです。今後タイトル戦などで65銀が出てきても不思議ではありません。(ただしいくら形勢は互角と言っても、指しにくいものは指しにくいし、他にもいい手は一杯あるし、メリットがあるかと言われるとあまり多くないと思うので出てこない可能性のほうが高いかもしれません。将棋としてはあり得ても、公式戦ではあり得ないかもしれない手、と言う位置づけでしょうか)。この将棋の、目に見える(棋譜として実現した)決定的な後手の損は、62手目の77と金(龍を取った手)です。これは、58手目に45角と出たので、攻め合いが確定し、ここで、45角とせざるを得なかったのは、22飛のせいじゃないだろうか?と言うのが私の考えです。62手目に77と金にしないための分岐点まで戻すと、54手目の22飛まで遡るのじゃないだろうか?と言うように考えています。検索自体も足りなくなります。これでも、完全に評価値に従った「最善手」を指す場合は、ここまでこの問題が表面化することはありません。ゆう状態のとき、わざとランダムにより「評価値的な次善手」を指すと、変なことが発生しやすくなるということです。採用した場合、無意味な手や、わざわざやらなくてもいい手(44角打)のような手を、手と手の間に挟んでくるケースさえあるのです。ランダムの導入は考え物です)。ここまで、第一局の内容と、私のソフトに対する見解でした。ランダムどうこうは、私は本当はAperyの仕様を知らないので、間違ってるかもしれません。直感的に私にはそのように見えました。一言で言うとこれは「将棋に対する考え方」の問題です。人間からすると、「めんどうくさい、不愉快」な手かもしれませんが、それは人間から見てそうなのであって、ソフトから見ればそうではないと言うことです。将棋盤外の都合だということです。負ける場合は1手でも引き伸ばすことを良しとするケースが多いです。これは詰め将棋の考え方に似てますね。絶対に必ずではありませんが、どっちかと言うとソフトはそのような方針のもと、棋譜を作ります。私自身、あまり棋力が高くなく、24でR1000付近なのですが、習甦のごまかしようもない強さはさすがと思いました。今回は、その強さがはっきりと分かる形で勝利したと思います。今回の対局では強いから勝ったと言える、鬼のような強さでした。それを実装するのって、けっこう難しいんですよね。基本はマシンの検索にまかせて総当り検索を大暴れさせれば、大筋はそれでよいわけです。強いから勝ったとも言いにくいような将棋になりがちなんですよね。今回の習甦は本当に見事だったと思います。なにより、貫禄の安定した動作を見せてくれました。開発者である竹内さんはそんな不安は見せておりませんでした。それどころか、将棋の内容にこだわっていたご様子です。やることをやっている証拠なんだと思います。第二局のやねうら王は、そのへん少し慌てている様子もあるようです。これが普通だと思います。初電王戦でしかもバージョンアップなしなら特に。私は勝敗は気にせず、純粋にその将棋を見せてもらうことにしました。今回は完全に第三者的な立場から将棋の内容だけを見ることにします。どちらにも問題があるので素直に応援できないと言うのが本音ですね。15:20電王戦見ましたTweet広告を非表示にするもっと読むコメントを書く2014-03-13ログインIDを忘れて放置してたとは言えないディスプレイをヤフオクで落として素晴らしい解像度となりました。共感できる部分がいっぱいありました。私にはとてもそうとは思えません。そもそもソフトは将棋がなんたる物かすら理解してません。形勢判断もおかしいです。ソフトが勝つのは純粋に読みのゴリ押しです。なんと言うか、人間が、「こりゃ強い」と感じるのは、勝敗じゃないんです。その世界の中に入っているとそうなると思います。困ったことに人間ってやつは、それ以外の強さの測定能力があまり高くないのです。将棋と言うのは、実は99%以上が将棋以外の要素から成り立っています。将棋は99%人間特有の概念です。人が槍を持って相手の心臓を突き刺した。それを見て「佐藤と鈴木が戦って鈴木が勝ったぞ!」と誰かが言った。人間らしい概念のかたまりだと思います。少なくとも物理現象を説明した物じゃないです。将棋ソフトはどうなの?と言うと、ほぼ全てのソフトは、攻めるも守るも、その他何も教えていません。言うと、それを教えるなんてとてもとても・・・って感じだからです。確実な読みと、適当な評価計算の連続です。私のソフトは多少教えてあります。それは評価点を様々に複数出すと言う点だけですが。一応攻めの概念と守りの概念は若干ですが導入されていますし、その度合いも調節できます。(これ以上やろうとは思いませんけども・・・)。人間の頭の中がどうなっているか、と言う事に比べると、もう比べ物にならないくらい複雑なことになってますね。なにがどう複雑なのかも分からないくらい複雑です、人間は。その結果として、人間は実際に読むべき盤面を恐ろしく効率化しています。人間のやりかたをそのままソフトに導入するのが正しいとなるわけでもありません。得意分野がありますからね。全部データを読み込んで総当り検索なんてどう見てもコンピュータのほうが得意です。ソフトはなにもかも人間の真似をする必要は全くないと思っています。(が、現時点ではマネをしなきゃならないのに難しすぎて出来てない部分のほうが圧倒的に多いと思います)。将棋がなんであるのか、と言う段階から人間とはそれを異にします。手の考えかたから盤面評価その他もろもろ、全部変わってきます。将棋の解説なんてもってのほかですね。(ただし、ある程度棋力がある人に対してはいろいろな手の流れを表示すればそれでよいので、そうゆう意味では難しくありません。これは人間とソフトが将棋という物を共通の「中間言語」として扱えると言うことです。将棋初心者には通用しません)。うらおさんと見解を少し違うところがあります。うらおさんはこう言いました。「人間が少ない手数で効率的に考えれるのは経験があるからです」と。それはかなり私の考えとは違います。経験と言うのは、人間が持ち合わせるものすごい数の能力のうちの、ほんの一つだと思います。人間に将棋を教える時、「これは攻めの手だよ」の一言で伝わるんですよ。将棋を知る前から「攻め」とか知ってるんです。