I think ko moves are taken into account on one of in the input planes
for most configurations. At least I hope remember that correctly.
Could it be achieved to create such a plane from the prior input
matrix and following output matrix by difference?

On Wed, Dec 9, 2015 at 2:08 PM, Igor Polyakov
<weiqiprogramm...@gmail.com> wrote:
> I doubt that the illegal moves would fall away since every professional
> would retake the ko... if it was legal
>
>
> On 2015-12-09 4:59, Michael Markefka wrote:
>>
>> Thank you for the feedback, everyone.
>>
>>
>> Regarding the CPU-GPU roundtrips, I'm wondering whether it'd be
>> possible to recursively apply the output matrix to the prior input
>> matrix to update board positions within the GPU and  without any
>> actual (possibly CPU-based) evaluation until all branches come up with
>> game ending states. I assume illegal moves would mostly fall away when
>> sticking to the top ten or top five move considerations provided by
>> the CNN.
>>
>> As for performance, I could imagine initialization being relatively
>> slow, but wouldn't be surprised if the GPU-based CNN performance could
>> offer a branch size, running through many parallel boards with
>> comparatively minor performance impact, where this outweighed the
>> initial overhead again.
>>
>> Whether this would provide a better evaluation function than MCTS I
>> don't know, but just like Alvaro I would love to see this tried, even
>> if just to rule it out for the moment.
>>
>>
>> I've got a GTX 980 Ti on a 4790k with 16 GB at home. For a low key
>> test I could run Windows (CUDA installed and running, tested with
>> pylearn2) or Ubuntu from a live setup on USB and would be willing to
>> run test code, if somebody provided a package I could simply download
>> and execute.
>>
>>
>> All the best
>>
>> Michael
>>
>>
>> On Tue, Dec 8, 2015 at 7:52 PM, Álvaro Begué <alvaro.be...@gmail.com>
>> wrote:
>>>
>>> Of course whether these "neuro-playouts" are any better than the heavy
>>> playouts currently being used by strong programs is an empirical
>>> question.
>>> But I would love to see it answered...
>>>
>>>
>>>
>>> On Tue, Dec 8, 2015 at 1:31 PM, David Ongaro <david.ong...@hamburg.de>
>>> wrote:
>>>>
>>>> Did everyone forget the fact that stronger playouts don't necessarily
>>>> lead
>>>> to an better evaluation function? (Yes, that what playouts essential
>>>> are, a
>>>> dynamic evaluation function.) This is even under the assumption that we
>>>> can
>>>> reach the same number of playouts per move.
>>>>
>>>>
>>>> On 08 Dec 2015, at 10:21, Álvaro Begué <alvaro.be...@gmail.com> wrote:
>>>>
>>>> I don't think the CPU-GPU communication is what's going to kill this
>>>> idea.
>>>> The latency in actually computing the feed-forward pass of the CNN is
>>>> going
>>>> to be in the order of 0.1 seconds (I am guessing here), which means
>>>> finishing the first playout will take many seconds.
>>>>
>>>> So perhaps it would be interesting to do something like this for
>>>> correspondence games, but not for regular games.
>>>>
>>>>
>>>> Álvaro.
>>>>
>>>>
>>>>
>>>> On Tue, Dec 8, 2015 at 12:03 PM, Petr Baudis <pa...@ucw.cz> wrote:
>>>>>
>>>>>    Hi!
>>>>>
>>>>>    Well, for this to be practical the entire playout would have to be
>>>>> executed on the GPU, with no round-trips to the CPU.  That's what my
>>>>> email was aimed at.
>>>>>
>>>>> On Tue, Dec 08, 2015 at 04:37:05PM +0000, Josef Moudrik wrote:
>>>>>>
>>>>>> Regarding full CNN playouts, I think that problem is that a playout is
>>>>>> a
>>>>>> long serial process, given 200-300 moves a game. You need to construct
>>>>>> planes and transfer them to GPU for each move and read result back (at
>>>>>> least with current CNN implementations afaik), so my guess would be
>>>>>> that
>>>>>> such playout would take time in order of seconds. So there seems to be
>>>>>> a
>>>>>> tradeoff, CNN playouts are (probably much) better (at "playing better
>>>>>> games") than e.g. distribution playouts, but whether this is worth the
>>>>>> implied (probably much) lower height of the MC tree is a question.
>>>>>>
>>>>>> Maybe if you had really a lot of GPUs and very high thinking time,
>>>>>> this
>>>>>> could be the way.
>>>>>>
>>>>>> Josef
>>>>>>
>>>>>> On Tue, Dec 8, 2015 at 5:17 PM Petr Baudis <pa...@ucw.cz> wrote:
>>>>>>
>>>>>>>    Hi!
>>>>>>>
>>>>>>>    In case someone is looking for a starting point to actually
>>>>>>> implement
>>>>>>> Go rules etc. on GPU, you may find useful:
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> https://www.mail-archive.com/computer-go@computer-go.org/msg12485.html
>>>>>>>
>>>>>>>    I wonder if you can easily integrate caffe GPU kernels in another
>>>>>>> GPU
>>>>>>> kernel like this?  But without training, reimplementing the NN could
>>>>>>> be
>>>>>>> pretty straightforward.
>>>>>>>
>>>>>>> On Tue, Dec 08, 2015 at 04:53:14PM +0100, Michael Markefka wrote:
>>>>>>>>
>>>>>>>> Hello Detlef,
>>>>>>>>
>>>>>>>> I've got a question regarding CNN-based Go engines I couldn't find
>>>>>>>> anything about on this list. As I've been following your posts
>>>>>>>> here, I
>>>>>>>> thought you might be the right person to ask.
>>>>>>>>
>>>>>>>> Have you ever tried using the CNN for complete playouts? I know
>>>>>>>> that
>>>>>>>> CNNs have been tried for move prediction, immediate scoring and
>>>>>>>> move
>>>>>>>> generation to be used in an MC evaluator, but couldn't find
>>>>>>>> anything
>>>>>>>> about CNN-based playouts.
>>>>>>>>
>>>>>>>> It might only be feasible to play out the CNN's first choice move
>>>>>>>> for
>>>>>>>> evaluation purposes, but considering how well the performance of
>>>>>>>> batch
>>>>>>>> sizes scales, especially on GPU-based CNN applications, it might be
>>>>>>>> possible to setup something like 10 candidate moves, 10 reply
>>>>>>>> candidate moves and then have the CNN play out the first choice
>>>>>>>> move
>>>>>>>> for those 100 board positions until the end and then sum up scores
>>>>>>>> again for move evaluation (and/or possibly apply some other tried
>>>>>>>> and
>>>>>>>> tested methods like minimax). Given that the number of 10 moves is
>>>>>>>> supposed to be illustrative rather than representative, other
>>>>>>>> configurations of depth and width in position generation and
>>>>>>>> evaluation would be possible.
>>>>>>>>
>>>>>>>> It feels like CNN can provide a very focused, high-quality width in
>>>>>>>> move generation, but it might also be possible to apply that
>>>>>>>> quality
>>>>>>>> to depth of evaluation.
>>>>>>>>
>>>>>>>> Any thoughts to share?
>>>>>>>>
>>>>>>>>
>>>>>>>> All the best
>>>>>>>>
>>>>>>>> Michael
>>>>>>>>
>>>>>>>> On Tue, Dec 8, 2015 at 4:13 PM, Detlef Schmicker <d...@physik.de>
>>>>>>>> wrote:
>>>>>>>>>
>>>>>>>>> -----BEGIN PGP SIGNED MESSAGE-----
>>>>>>>>> Hash: SHA1
>>>>>>>>>
>>>>>>>>> Hi,
>>>>>>>>>
>>>>>>>>> as somebody ask I will offer my actual CNN for testing.
>>>>>>>>>
>>>>>>>>> It has 54% prediction on KGS 6d+ data (which I thought would be
>>>>>>>>> state
>>>>>>>>> of the art when I started training, but it is not anymore:).
>>>>>>>>>
>>>>>>>>> it has:
>>>>>>>>> 1
>>>>>>>>> 2
>>>>>>>>> 3
>>>>>>>>>>
>>>>>>>>>> 4 libs playing color
>>>>>>>>>
>>>>>>>>> 1
>>>>>>>>> 2
>>>>>>>>> 3
>>>>>>>>>>
>>>>>>>>>> 4 libs opponent color
>>>>>>>>>
>>>>>>>>> Empty points
>>>>>>>>> last move
>>>>>>>>> second last move
>>>>>>>>> third last move
>>>>>>>>> forth last move
>>>>>>>>>
>>>>>>>>> input layers, and it is fully convolutional, so with just editing
>>>>>>>>> the
>>>>>>>>> golast19.prototxt file you can use it for 13x13 as well, as I did
>>>>>>>>> on
>>>>>>>>> last sunday. It was used in November tournament as well.
>>>>>>>>>
>>>>>>>>> You can find it
>>>>>>>>> http://physik.de/CNNlast.tar.gz
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> If you try here some points I like to get discussion:
>>>>>>>>>
>>>>>>>>> - - it seems to me, that the playouts get much more important
>>>>>>>>> with such
>>>>>>>>> a strong move prediction. Often the move prediction seems better
>>>>>>>>> the
>>>>>>>>> playouts (I use 8000 at the moment against pachi 32000 with about
>>>>>>>>> 70%
>>>>>>>>> winrate on 19x19, but with an extremely focused progressive
>>>>>>>>> widening
>>>>>>>>> (a=400, a=20 was usual).
>>>>>>>>>
>>>>>>>>> - - live and death becomes worse. My interpretation is, that the
>>>>>>>>> strong
>>>>>>>>> CNN does not play moves, which obviously do not help to get a
>>>>>>>>> group
>>>>>>>>> life, but would help the playouts to recognize the group is dead.
>>>>>>>>> (http://physik.de/example.sgf top black group was with weaker
>>>>>>>>> move
>>>>>>>>> prediction read very dead, with good CNN it was 30% alive or so
>>>>>>>>> :(
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> OK, hope you try it, as you know our engine oakfoam is open
>>>>>>>>> source :)
>>>>>>>>> We just merged all the CNN stuff into the main branch!
>>>>>>>>> https://bitbucket.org/francoisvn/oakfoam/wiki/Home
>>>>>>>>> http://oakfoam.com
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Do the very best with the CNN
>>>>>>>>>
>>>>>>>>> Detlef
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> code:
>>>>>>>>> if (col==Go::BLACK) {
>>>>>>>>>            for (int j=0;j<size;j++)
>>>>>>>>>              for (int k=0;k<size;k++)
>>>>>>>>>                    {
>>>>>>>>>          for (int l=0;l<caffe_test_net_input_dim;l++)
>>>>>>>>> data[l*size*size+size*j+k]=0;
>>>>>>>>>          //fprintf(stderr,"%d %d %d\n",i,j,k);
>>>>>>>>>          int pos=Go::Position::xy2pos(j,k,size);
>>>>>>>>>          int libs=0;
>>>>>>>>>          if (board->inGroup(pos))
>>>>>>>>> libs=board->getGroup(pos)->numRealLibs()-1;
>>>>>>>>>          if (libs>3) libs=3;
>>>>>>>>>          if (board->getColor(pos)==Go::BLACK)
>>>>>>>>>                    {
>>>>>>>>>                            data[(0+libs)*size*size + size*j +
>>>>>>>>> k]=1.0;
>>>>>>>>>                            //data[size*size+size*j+k]=0.0;
>>>>>>>>>                            }
>>>>>>>>>                else if (board->getColor(pos)==Go::WHITE)
>>>>>>>>>                        {
>>>>>>>>>                            //data[j*size+k]=0.0;
>>>>>>>>>                            data[(4+libs)*size*size + size*j +
>>>>>>>>> k]=1.0;
>>>>>>>>>                            }
>>>>>>>>>                else if
>>>>>>>>> (board->getColor(Go::Position::xy2pos(j,k,size))==Go::EMPTY)
>>>>>>>>>                {
>>>>>>>>>                              data[8*size*size + size*j + k]=1.0;
>>>>>>>>>                            }
>>>>>>>>>              }
>>>>>>>>>          }
>>>>>>>>>          if (col==Go::WHITE) {
>>>>>>>>>            for (int j=0;j<size;j++)
>>>>>>>>>              for (int k=0;k<size;k++)
>>>>>>>>>                    {//fprintf(stderr,"%d %d %d\n",i,j,k);
>>>>>>>>>          for (int l=0;l<caffe_test_net_input_dim;l++)
>>>>>>>>> data[l*size*size+size*j+k]=0;
>>>>>>>>>          //fprintf(stderr,"%d %d %d\n",i,j,k);
>>>>>>>>>          int pos=Go::Position::xy2pos(j,k,size);
>>>>>>>>>          int libs=0;
>>>>>>>>>          if (board->inGroup(pos))
>>>>>>>>> libs=board->getGroup(pos)->numRealLibs()-1;
>>>>>>>>>          if (libs>3) libs=3;
>>>>>>>>>          if (board->getColor(pos)==Go::BLACK)
>>>>>>>>>                    {
>>>>>>>>>                            data[(4+libs)*size*size + size*j +
>>>>>>>>> k]=1.0;
>>>>>>>>>                            //data[size*size+size*j+k]=0.0;
>>>>>>>>>                            }
>>>>>>>>>                else if (board->getColor(pos)==Go::WHITE)
>>>>>>>>>                        {
>>>>>>>>>                            //data[j*size+k]=0.0;
>>>>>>>>>                            data[(0+libs)*size*size + size*j +
>>>>>>>>> k]=1.0;
>>>>>>>>>                            }
>>>>>>>>>                else if (board->getColor(pos)==Go::EMPTY)
>>>>>>>>>                {
>>>>>>>>>                              data[8*size*size + size*j + k]=1.0;
>>>>>>>>>                            }
>>>>>>>>>      }
>>>>>>>>>          }
>>>>>>>>> if (caffe_test_net_input_dim > 9) {
>>>>>>>>>    if (board->getLastMove().isNormal()) {
>>>>>>>>>      int
>>>>>>>>> j=Go::Position::pos2x(board->getLastMove().getPosition(),size);
>>>>>>>>>      int
>>>>>>>>> k=Go::Position::pos2y(board->getLastMove().getPosition(),size);
>>>>>>>>>      data[9*size*size+size*j+k]=1.0;
>>>>>>>>>    }
>>>>>>>>>    if (board->getSecondLastMove().isNormal()) {
>>>>>>>>>      int
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> j=Go::Position::pos2x(board->getSecondLastMove().getPosition(),size);
>>>>>>>>>      int
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> k=Go::Position::pos2y(board->getSecondLastMove().getPosition(),size);
>>>>>>>>>      data[10*size*size+size*j+k]=1.0;
>>>>>>>>>    }
>>>>>>>>>    if (board->getThirdLastMove().isNormal()) {
>>>>>>>>>      int
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> j=Go::Position::pos2x(board->getThirdLastMove().getPosition(),size);
>>>>>>>>>      int
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> k=Go::Position::pos2y(board->getThirdLastMove().getPosition(),size);
>>>>>>>>>      data[11*size*size+size*j+k]=1.0;
>>>>>>>>>    }
>>>>>>>>>    if (board->getForthLastMove().isNormal()) {
>>>>>>>>>      int
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> j=Go::Position::pos2x(board->getForthLastMove().getPosition(),size);
>>>>>>>>>      int
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> k=Go::Position::pos2y(board->getForthLastMove().getPosition(),size);
>>>>>>>>>      data[12*size*size+size*j+k]=1.0;
>>>>>>>>>    }
>>>>>>>>> }
>>>>>>>>>
>>>>>>>>> -----BEGIN PGP SIGNATURE-----
>>>>>>>>> Version: GnuPG v2.0.22 (GNU/Linux)
>>>>>>>>>
>>>>>>>>> iQIcBAEBAgAGBQJWZvOlAAoJEInWdHg+Znf4t8cP/2a9fE7rVb3Hz9wvdMkvVkFS
>>>>>>>>> 4Y3AomVx8i56jexVyXuzKihfizVRM7x6lBiwjYBhj4Rm9UFWjj2ZvDzBGCm3Sy4I
>>>>>>>>> SpG8D01VnzVR6iC1YTu3ecv9Wo4pTjc7NL5pAxiZDB0V7OTRklfZAYsX4mWyHygn
>>>>>>>>> cr1pIb79/9QfBf/johmuutXJIwYfVG9ShR1+udbxs3aU3QDAbJJ4eTs8oj+NqFpg
>>>>>>>>> JolEEEg3wY693e77SqbUbjxR3kSsysoz9h1nKnR/ZjHByqlwNvSz9ho9eU0rKhaK
>>>>>>>>> GSQ22/c1VPIZhr24FYBbYNYweOzDtonLpuUFCPSnYVels3h/I/LlqV3MeDo6wuZ2
>>>>>>>>> QCPp5+11o4JzvEt7A4zfJCtEOEH0W2/+IjRcIkAVOo65OV/pPsz2EjHehMU6PC6m
>>>>>>>>> vXA/kPx0jqUm1qSb0qCgMq5ZvSqfpcCY7JOlkEwkDBS1fty9sU0hqst3zXR0KGtn
>>>>>>>>> rFuoREmQYi/mkjZfS2Q4AHiZUDbDZUKzRegUA+gR/eKAmJsmWeTDEI9ZAXgxL0cB
>>>>>>>>> p1HGBNDEUKGk+ruq0gIe5vYygyBcJV0BbbBnweDjeZnlG8vLUAVoMF6V/q3gkZb1
>>>>>>>>> P61rfE4d9dohfGBsZ+UWltRyWMj09ieR2G2zCDpIXyxEuoV6CTAlLzDuhmqFa2ma
>>>>>>>>> Fp3lK/uLhOucXwBtStdx
>>>>>>>>> =E47K
>>>>>>>>> -----END PGP SIGNATURE-----
>>>>>>>>> _______________________________________________
>>>>>>>>> Computer-go mailing list
>>>>>>>>> Computer-go@computer-go.org
>>>>>>>>> http://computer-go.org/mailman/listinfo/computer-go
>>>>>>>>
>>>>>>>> _______________________________________________
>>>>>>>> Computer-go mailing list
>>>>>>>> Computer-go@computer-go.org
>>>>>>>> http://computer-go.org/mailman/listinfo/computer-go
>>>>>>>
>>>>>>> --
>>>>>>>                                  Petr Baudis
>>>>>>>          If you have good ideas, good data and fast computers,
>>>>>>>          you can do almost anything. -- Geoffrey Hinton
>>>>>>> _______________________________________________
>>>>>>> Computer-go mailing list
>>>>>>> Computer-go@computer-go.org
>>>>>>> http://computer-go.org/mailman/listinfo/computer-go
>>>>>>
>>>>>> _______________________________________________
>>>>>> Computer-go mailing list
>>>>>> Computer-go@computer-go.org
>>>>>> http://computer-go.org/mailman/listinfo/computer-go
>>>>>
>>>>>
>>>>> --
>>>>>                                  Petr Baudis
>>>>>          If you have good ideas, good data and fast computers,
>>>>>          you can do almost anything. -- Geoffrey Hinton
>>>>> _______________________________________________
>>>>> Computer-go mailing list
>>>>> Computer-go@computer-go.org
>>>>> http://computer-go.org/mailman/listinfo/computer-go
>>>>
>>>>
>>>> _______________________________________________
>>>> Computer-go mailing list
>>>> Computer-go@computer-go.org
>>>> http://computer-go.org/mailman/listinfo/computer-go
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> Computer-go mailing list
>>>> Computer-go@computer-go.org
>>>> http://computer-go.org/mailman/listinfo/computer-go
>>>
>>>
>>>
>>> _______________________________________________
>>> Computer-go mailing list
>>> Computer-go@computer-go.org
>>> http://computer-go.org/mailman/listinfo/computer-go
>>
>> _______________________________________________
>> Computer-go mailing list
>> Computer-go@computer-go.org
>> http://computer-go.org/mailman/listinfo/computer-go
>
>
> _______________________________________________
> Computer-go mailing list
> Computer-go@computer-go.org
> http://computer-go.org/mailman/listinfo/computer-go
_______________________________________________
Computer-go mailing list
Computer-go@computer-go.org
http://computer-go.org/mailman/listinfo/computer-go

Reply via email to