teacup. [ 掲示板 ] [ 掲示板作成 ] [ 有料掲示板 ] [ ブログ ]

 投稿者
 メール
  題名
  内容 入力補助画像・ファイル<IMG>タグが利用可能です。(詳細)
    
 URL
[ ケータイで使う ] [ BBSティッカー ] [ 書込み通知 ]


Re: value network 4

 投稿者:HiraBot  投稿日:2016年 9月27日(火)07時12分23秒
  山下さんコメントありがとうございます

確かに定先で学習データを作っていますから互先の場合はコミの分だけ誤差が生じてしまいますね
新しく互先の学習データを作成し確かめてみようかと思います
 
 

Re: value network 4

 投稿者:山下  投稿日:2016年 9月27日(火)05時42分3秒
  dcnn-No3の方がはっきりとlossが小さいですね。
個人的には200手ぐらいの簡単な?局面が大量に含まれているせいかと思います。
AlphaGoの論文のlossが小さいのもこのせいかと。

自己対戦で結果がでないのは入力が以前のように「自分の手番の石、相手の石」だと
コミの分、ValueNetが白番では常に間違えた結果を学習しているせいだと思います。
 

Re:来週の土日にCGFオープン

 投稿者:荒木(ark)  投稿日:2016年 9月26日(月)00時07分50秒
  荒木です。
CGFオープン2016の申し込みは締め切らせて頂きました。
ありがとうございました。
http://hp.vector.co.jp/authors/VA012620/cgf2016/list2016.html
 

Re: value network 4

 投稿者:HiraBot  投稿日:2016年 9月25日(日)22時22分19秒
  学習データを新しく作成した dcnn-No3(dcnn 自己対戦棋譜)にしたら一部良い結果が出ました

dcnn-No3 : 30手まで乱数を入れる、200手打ち切りで平塚の囲碁 1000playout にて勝敗決定
           31手から200手の間で 15手毎に局面取り出し、勝敗にて value 1 or 0

グラフは KGS 4d 棋譜と dcnn-No3 棋譜の比較です
ネット構成は同じです、入力層のデータ項目も同じです
dcnn-No3 の学習前 loss=0.125 学習後 loss=0.094 となりました、随分改善されました

playoutの値と VN の値の平均勝率を返す方式で平塚の囲碁に VN を入れて
4000 playout で自己対戦した所 24勝 30敗 勝率44%  でした
loss が大幅に減少しても自己対戦の結果が悪いのは意外でした、理由も全く分かりません
 

来週の土日にCGFオープン

 投稿者:山下  投稿日:2016年 9月24日(土)21時10分20秒
  来週の10月1日(土)、2日(日)にCGFオープン(コンピュータ囲碁大会)が開催されます。
1日目が9路で2日目が19路です。
お気軽にご参加ください。観戦、見学も自由です。

現在の参加者は以下の通りです。
http://hp.vector.co.jp/authors/VA012620/cgf2016/list2016.html
CGFオープン2016
http://hp.vector.co.jp/authors/VA012620/cgf2016/cgf2016.html
 

Re: openmp の関数呼び出しの動作

 投稿者:gg  投稿日:2016年 9月24日(土)16時22分21秒
  >プログラムはread only なので問題ない
そのとおりです.クロック周波数の上昇がほとんど望めない今,
並列化は非常に重要な技術になっており,盛んに研究されてます.
細粒度では atomic,粗粒度では transactional memory なんて
ものもありますから,興味があればお調べ下さい.
 

Re: openmp の関数呼び出しの動作

 投稿者:masatsune  投稿日:2016年 9月24日(土)10時19分21秒
編集済
  gg 様
丁寧な御説明有難うございます。大変勉強になります。

複数のCPUのプログラムカウンタが、プログラムの同じ場所
を指していても、プログラムはread only なので問題ない
という事ですね。(目から鱗状態です。)

以前に5x5の魔方陣を解くプログラムでOpenMPを使って以来
の2回目の並列化プログラムで、この時は動的なマシン&CPU
分散処理のためにOpenMPを使いましたが、データの共有が問題
になるような本格的な物は今回が初めてです。

強いプログラムを追及するというよりは、囲碁のプログラミ
ングを楽しみながら勉強できればと思っております。

この度は 貴重なお時間を割いていただきまして有難うござ
いました。

masatsune
 

Re: openmp の関数呼び出しの動作

 投稿者:gg  投稿日:2016年 9月24日(土)09時20分21秒
  >1)グローバル変数・static宣言された変数 に書き込みをする関数は
>実行時に関数にロックをかけるか、スレッド毎に データ・関数を個別
>に用意する必要がある。
通常,関数全体にロックを掛けることはせず,排他制御する変数にアクセスする時だけ
ロックを掛けます.その方が並列度が上がりますから.また,ローカル変数は(そもそも
共有されないはずなので)排他制御する必要がないのは当然として,グローバルな変数
であっても,スレッド間で共有されてない,あるいは共有されていても排他制御の必要
が無いことはあり得ます.この辺りは,プログラムの内容・動作に依存するので,作者
にしか分からないことです.プログラムを並列化する場合,機械的に判断するのではな
く,自分でしっかり考えて,必要最低限のロックを掛けるようにしないと,手間の割に
性能が上がりません.また,単純なカウンタのようなものでしたら atomic を使う
方が性能が上がります.こちらもご検討下さい.
 

Re: openmp の関数呼び出しの動作

 投稿者:masatsune  投稿日:2016年 9月23日(金)16時39分57秒
  gg 様
返信有難うございます。

以下の理解で合っていますでしょうか。

1)グローバル変数・static宣言された変数 に書き込みをする関数は
実行時に関数にロックをかけるか、スレッド毎に データ・関数を個別
に用意する必要がある。
(関数は自分のスレッド番号を参照し、使用するデータを切り替えれば
必須ではないと思いますが、簡便のため。)

2)グローバル変数・static宣言された変数からの読み出し、ローカル
変数への読み書きのみの場合スレッド毎に個別に用意する必要はない。

よろしくお願いします。
 

Re: openmp の関数呼び出しの動作

 投稿者:gg  投稿日:2016年 9月23日(金)14時58分17秒
  >使用する全ての関数をスレッド分用意する
OpenMP を使うにせよ,他のもの(pthread for C,
std::stread or boost::thread for C++) を使うにせよ,
↑は無意味です.コード(命令)は書き変わることがないので,
いくらでも再利用できますから.気にする必要があるのは(実行
時に)スレッド毎に異なる可能性ががあるものだけです.
 

/222