ReLU в Deep Neural Net, обученный с помощью Contrastive Divergence

Я пытаюсь адаптировать код для глубокого обучения с помощью Contrastive Divergence с http://deeplearning.net/tutorial/DBN.html для работы с реальными входными данными вместо двоичных, как описано в руководстве. Я понимаю, что способ сделать это - перейти от функции активации сигмоида к выпрямленной линейной единице (ReLU), но у меня есть несколько вопросов по поводу этого с практической точки зрения...

  1. Могу ли я просто использовать ReLU, определенный как max(0,x), или мне понадобится NReLU, определенный как max(0,x+N), где N - это гауссов шум? Если рекомендуется NReLU, как правильно рассчитать N для образца?
  2. Если я использую ReLU (или NReLU), нужно ли мне модифицировать мою функцию свободной энергии, которая для сигмоидальных единиц является кодом Python...

    def free_energy(self, v_sample):
        wx_b = T.dot(v_sample, self.W) + self.hbias
        vbias_term = T.dot(v_sample, self.vbias)
        hidden_term = T.sum(T.log(1 + T.exp(wx_b)), axis=1)
        return -hidden_term - vbias_term
    

Из того, что я видел в статьях, вышеприведенное выглядит так, как будто оно будет практически работать как для сигмовидной, так и для ReLU. Если это не правильно, я буду признателен за публикацию измененного кода для работы с ReLU.

0 ответов

Другие вопросы по тегам