tensorflow強化學習之打乒乓球(Reinforcement Learning)

深度學習大部分是監督學習,並且須要海量,高質量的數據對。這在現實世界,是很是難的事情。人類的學習過程裏,不可能讓一個孩子,看一億張圖片,才學會識別一隻貓。python

 

強化學習則更像人類的學習過程,此次3天達到世界頂尖高手水平的alpha zero也是基於強化學習的算法,從0開始。鏈接主義學習裏,有監督學習,非監督學習,還有強化學習,強化學習靠環境提供的強化信號對動做的優劣作評價。git

 

下面這篇文章對RL作了很好的總結:github

http://karpathy.github.io/2016/05/31/rl/算法

OpenAI gym提供一個很好的強化學習的工具箱:網絡

https://github.com/openai/gym函數

咱們看看強化學習能作什麼有意思的事情。工具

Atari是一個古老的打乒乓球的遊戲。學習

再看一個MDP決策:人工智能

咱們就讓RL作相似的事情,本文先介紹讓計算機從像素開始學會打乒乓球。spa

乒乓球的遊戲規則就很少介紹,直接看系統如何實現,咱們不僅針對這個遊戲作系統設計,咱們設計儘可能經過的系統,能完成更多任務,看以下的策略網絡。

pip install gym,這個強化學習的開發包是須要的。atari_py這個包也是須要的。

t_states = tf.placeholder(tf.float32, shape=[None,80,80])
# policy network
network = InputLayer(t_states, name='input')
network = DenseLayer(network, n_units=H, act=tf.nn.relu, name='hidden')
network = DenseLayer(network, n_units=3, name='output')
probs = network.outputs
sampling_prob = tf.nn.softmax(probs)

t_actions = tf.placeholder(tf.int32, shape=[None])
t_discount_rewards = tf.placeholder(tf.float32, shape=[None])
loss = tl.rein.cross_entropy_reward_loss(probs, t_actions, t_discount_rewards)
train_op = tf.train.RMSPropOptimizer(learning_rate, decay_rate).minimize(loss)

這裏損失函數,咱們仍然使用交叉熵損失

cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(logits=logits, targets=actions)

但在這個基礎上,乘以環境反饋的回報reward

loss = tf.reduce_sum(tf.multiply(cross_entropy, rewards))
action = tl.rein.choice_action_by_probs(prob.flatten(), [1,2,3])
observation, reward, done, _ = env.step(action)

每一次行動,系統會給出一個reward,獎勵或懲罰,而後訓練最優的行動方案。

強化還能夠作不少很酷的事情,後續繼續更新。

 

關於做者:魏佳斌,互聯網產品/技術總監,北京大學光華管理學院(MBA),特許金融分析師(CFA),資深產品經理/碼農。偏心python,深度關注互聯網趨勢,人工智能,AI金融量化。致力於使用最前沿的認知技術去理解這個複雜的世界。

掃描下方二維碼,關注:AI量化實驗室(ailabx),瞭解AI量化最前沿技術、資訊。

相關文章
相關標籤/搜索