gflownet 은 어떤 object 혹은 개념 (graph, set, 생각 등)을 순차적으로 쌓아나갈 수 있는 틀, 그리고 그 학습방식을 말해.


예를 들어 레고로 보트를 만든다고 생각해봐. 레고조각들로 그럴싸한 보트를 만들 수 있는 방법이 엄청 많지?


수많은 다양하게 생긴 보트가 만들어질 수 있고, 혹은 하나의 보트를 다른 조립과정으로 만들 수 있는 경우의 수도 많아


이처럼 gflownet 은 그럴싸한 보트를 만드는 방법, 그 "flow" 를 동적으로 생성 ("g"enerate) 할 수 있는 네트워크 ("net"work) 야.


반대로 어떤 보트가 주어졌을 때 이 보트를 만든 방법이 무엇일까 역으로 추적도 가능하지.


다양한 방식으로 현상을 이해하고 추론하는 걸 가능하게 해주는 틀이야.


이게 왜 중요하냐면, 보트 대신에 "생각" 을 쌓아나간다고 생각해봐. 그러면 기계가 이제 "생각에 생각을 거듭" 해서 최종 결과물 (결론)에 도달하는,


일종의 의식활동을 하게 되는거지.


기계가 생각해봤더니 뭔가 말이 안된다? 그러면 몇스텝 뒤로 가서 (레고 조금 분해해서) 다시 생각을 정리하고 (다른 모양의 보트 완성시킴)


무의식적으로 개랑 고양이 때려맞추는 그런게 더이상 아니라 gflownet 은 사람이 생각하는걸 흉내내고자 하는거지.




gflownet 그림인데 별거 없어.


s0 는 아직 조립 시작하기 전이고, x5, x8, x11 이런애들은 완성된 보트를 의미해. 중간에 동그라미는 조립하다만 상태고.


s0에서 물을 틀기 시작했어 (알기쉽게 설명하면 다양한 보트를 만들 모든 경우의수를 다 포함한 상태, 즉 물의 총합).


근데 보니까 x13 보트가 좀 괜찮게 생겼고 x16 보트는 좀 보트같다고 하기 뭐한거야?


그래서 x13에 빨아당기는 힘을 강하게 줬어


그러면 물이 그쪽으로 더 많이 흐를거잖아? 즉 레고를 x13 보트쪽으로 조립할 확률이 x16으로 조립할 확률보다 높아지는거지


그냥 이게 gflownet 학습하는 방식이야. 중간에 동그라미들은 그냥 통로라고 생각하면 돼.


나중에 시간되면 최대한 알기쉽게 제대로 글 써볼게~