Армирование обучение _PolicyGradient (Градиент стратегия) _ анализ кода

Использование политики градиента решения задачи дискретного действия пространства.

А, импортировать пакет, определить гипер параметр

импорт тренажерный зал
импортировать tensorflow в ТФ
импортировать NumPy в нп
 из коллекции импорта Deque

################# параметры гипер ################,
#discount фактор
ГАММА = 0,95 
LEARNING_RATE = 0,01

 

Конструктор Два, PolicyGradient Агент:

1, при условии, размеров пространства, государственных операции пространственной размерности;

2, из последовательности структуры для хранения образцов;

3, вызов функции для создания функции политики приближения нейронных сетей, tensorflow сеанс, начальный или нейронные сети веса и смещение.

Защиту  __init__ (я, ENV):
         # self.time_step = 0 
        # состояние измерения 
        self.state_dim = env.observation_space.shape [0]
         # измерение действия 
        self.action_dim = env.action_space.n
         # пример списка 
        self.ep_obs, самостоятельно. ep_as, self.ep_rs = [], [], []
         # создание сетевой политики 
        self.create_softmax_network ()
        
        self.session = tf.InteractiveSession ()
        self.session.run (tf.global_variables_initializer ())

В-третьих, создать нейронную сеть:

Как использовано в данном описании, кросс-энтропии функции ошибки, вычисления градиента функции потерь с использованием нейронной сети. Выход вероятность Софтмакса каждой операции выходного слоя.

tf.nn.sparse_softmax_cross_entropy_with_logits логит вероятность того, функция первого процесса для получения SoftMax нормализации будет Lables одной горячей обработки вектора, а затем найти логит-анализ пересекают энтропию меток:

В котором находится метка г-го значения, соответствующего компонента вектора по SoftMax нормализации , выводимого, можно видеть, когда более точной классификации, соответствующие компоненты будут ближе к 1, так , что значение Кроме того, это будет меньше.

Поэтому, где вы можете получить хорошее понимание (мое понимание): Когда время шага-я момент, более подобные стратегии, если выход вероятности действия вектора сети и время шага я момент выборки, то крест энтропии Это будет меньше. Минимизация кросс-энтропия ошибки будет иметь возможность принимать политические решения ближе к действию нашей сети выборки. И, наконец, умноженная на соответствующем вознаграждении кросса энтропии временного шаге, награда будет размером функции потерь вводятся, энтропийные * вознаграждение больших параметры регулировки, рассчитанные в ходе нейронной сети будут больше в направлении градиента направления.

 

    Защиту create_softmax_network (самостоятельно):
        W1 = self.weight_variable ([self.state_dim, 20 ])
        b1 = self.bias_variable ([20 ])
        W2 = self.weight_variable ([20 , self.action_dim])
        b2 = self.bias_variable ([self.action_dim])
        
        # Входной слой 
        self.state_input = tf.placeholder (tf.float32, [Отсутствует, self.state_dim])
        self.tf_acts = tf.placeholder (tf.int32, [Отсутствует,], имя = ' actions_num ' )
        self.tf_vt = tf.placeholder (tf.float32, [Отсутствует,], имя = " actions_value " )
         # скрытый слой 
        h_layer = tf.nn.relu (tf.matmul (self.state_input, W1) + b1)
         # SoftMax слой 
        self.softmax_input = tf.matmul (h_layer, W2) + b2
         # SoftMax выход 
        self.all_act_prob = tf.nn.softmax (self.softmax_input, имя = ' act_prob ' )
         # кросс энтропии функции потерь 
        self.neg_log_prob = tf.nn. sparse_softmax_cross_entropy_with_logits (логит - анализ = self.softmax_input, лейблы = self.tf_acts)
        self.loss = tf.reduce_mean (self.neg_log_prob * self.tf_vt)   # награда направляется потеря 
        self.train_op = tf.train.AdamOptimizer (LEARNING_RATE) .minimize (self.loss)
        
    Защиту weight_variable (самость, форма):
        начальные = tf.truncated_normal (форма) # усечен нормальное распределение 
        возврат tf.Variable (начальный)
    
    Защиту bias_variable (самость, форма):
        Начальный = tf.constant (0.01, форма = форма)
         возвращает tf.Variable (начальный)

В-четвертых, последовательность выборки:

Защиту store_transition (я, с, а, г):
    self.ep_obs.append (ы)
    self.ep_as.append (а)
    self.ep_rs.append (г)

В-пятых, модель обучения:

, Нейронная сеть настраивается с помощью полной последовательности выборки Монте-Карло.

Защита узнать (самостоятельно):
     # оценить стоимость всех государств в настоящее время эпизода 
    discounted_ep_rs = np.zeros_like (self.ep_rs)
    running_add = 0
     для т в обратном (диапазоне (0, LEN (self.ep_rs))):
        running_add = running_add * ГАММА + self.ep_rs [т]
        discounted_ep_rs [т] = running_add
     #normalization
     discounted_ep_rs - = np.mean (discounted_ep_rs)
    discounted_ep_rs / = np.std (discounted_ep_rs)

    # Поезд эпизод 
    self.session.run (self.train_op, feed_dict = {
         self.state_input: np.vstack (self.ep_obs),
         self.tf_acts: np.array (self.ep_as),
         self.tf_vt: discounted_ep_rs,
    })

    self.ep_obs, self.ep_as, self.ep_rs = [], [], []     # пустой эпизод данных

 Шесть обучения:

# Hyper Параметры 
ENV_NAME = ' CartPole-V0 ' 
ЭПИЗОД = 3000 # Эпизод ограничение 
ШАГ = 3000 # Шаг ограничение в эпизоде 
TEST = 10 # Количество теста эксперимента каждый эпизод 100

Защиту главное ():
     # инициализация OpenAI Gym ENV и DQN агента 
    ENV = gym.make (ENV_NAME)
    агент = Policy_Gradient (ENV)

  для эпизода в диапазоне (ЭПИЗОД):
     # инициализация задачи 
    состояния = env.reset ()
     # Поезд 
    для шага в диапазоне (STEP):
        действие = agent.choose_action (состояние) # е жадного действия на поезд 
        # принять меры 
        next_state, вознаграждение, сделано, _ = env.step (действие)
         # образца 
        agent.store_transition (состояние, действие, награда)
        состояние = next_state
         если сделано:
             # печать ( «палка для» шаг, «шаги») 
            # модель обучения после полного образца 
            agent.learn ()
             перерыв

    # Тест каждые 100 эпизодов , 
    если эпизод% 100 == 0:
        total_reward = 0
         для I в диапазоне (ТЕСТ):
            состояние = env.reset ()
             для J в диапазоне (ШАГ):
                env.render ()
                действие = agent.choose_action (состояние) # прямое действие для испытания 
                состояния, награды, сделано, _ = env.step (действие)
                total_reward + = вознаграждение
                 , если сделано:
                     перерыв 
          ave_reward = total_reward / TEST
           печать ( ' эпизод: ' , эпизод, ' Оценка Средняя Награда: ' , ave_reward)

если  __name__ == ' __main__ ' :
  главный()

 

ссылка:

https://www.cnblogs.com/pinard/p/10137696.html

https://github.com/ljpzzz/machinelearning/blob/master/reinforcement-learning/policy_gradient.py

рекомендация

отwww.cnblogs.com/jasonlixuetao/p/10926502.html
рекомендация