suptitle matlab machine-learning artificial-intelligence bayesian-networks reinforcement-learning

matlab - suptitle - Implementación de aprendizaje de refuerzo de energía gratuita



suptitle matlab (2)

  1. El algoritmo en el documento parece extraño. Usan un tipo de aprendizaje hebbiano que aumenta la fuerza conecton, pero no hay un mecanismo para descomponerlos. En contraste, el CD regular empuja la energía de las fantasías incorrectas hacia arriba, equilibrando la actividad general. Especulo que necesitarás una fuerte regulación de sparcity y / o disminución de peso.
  2. prejuicio nunca dolería :)
  3. El ímpetu y otras cosas sofisticadas pueden acelerar, pero por lo general no es necesario.
  4. ¿Por qué Softmax en Hiddens? ¿Debería ser solo sigmoide?

He intentado implementar el algoritmo descrito aquí , y luego probarlo en la "gran tarea de acción" descrita en el mismo documento.

Descripción del algoritmo:

En resumen, el algoritmo usa un RBM de la forma que se muestra a continuación para resolver problemas de aprendizaje de refuerzo al cambiar sus pesos de modo que la energía libre de una configuración de red equivale a la señal de recompensa otorgada para ese par de acciones de estado.

Para seleccionar una acción, el algoritmo realiza el muestreo de gibbs mientras mantiene fijas las variables de estado. Con tiempo suficiente, esto produce la acción con la energía libre más baja y, por lo tanto, la recompensa más alta para el estado dado.

Descripción general de la gran tarea de acción:

Descripción general de las pautas de implementación del autor:

Una máquina Boltzmann restringida con 13 variables ocultas se entrenó en una instanciación de la tarea de acción grande con un espacio de estado de 12 bits y un espacio de acción de 40 bits. Trece estados clave fueron seleccionados al azar. La red se ejecutó para 12 000 acciones con una tasa de aprendizaje que va de 0,1 a 0,01 y una temperatura que va de 1,0 a 0,1 exponencial durante el curso de la capacitación. Cada iteración se inicializó con un estado aleatorio. Cada selección de acción consistió en 100 iteraciones del muestreo de Gibbs.

Detalles omitidos importantes:

  • ¿Se necesitaban unidades de prejuicio?
  • ¿Fue necesario reducir el peso? Y si es así, ¿L1 o L2?
  • ¿Se necesitaba una restricción de dispersión para los pesos y / o activaciones?
  • ¿Hubo alguna modificación en el descenso del gradiente? (por ejemplo, impulso)
  • ¿Qué metaparámetros se necesitan para estos mecanismos adicionales?

Mi implementación:

Inicialmente asumí que los autores no usaron mecanismos distintos a los descritos en las directrices, así que intenté entrenar la red sin unidades de sesgo. Esto condujo a un desempeño casi casual, y fue mi primera pista sobre el hecho de que algunos mecanismos deben haber sido considerados ''obvios'' por los autores y por lo tanto omitidos.

Jugué con los diversos mecanismos omitidos mencionados anteriormente y obtuve los mejores resultados al usar:

  • unidades ocultas softmax
  • momento de .9 (.5 hasta la 5ta iteración)
  • unidades de polarización para las capas ocultas y visibles
  • una tasa de aprendizaje 1/100 de la enumerada por los autores.
  • l2 pérdida de peso de .0002

Pero incluso con todas estas modificaciones, mi rendimiento en la tarea generalmente fue alrededor de una recompensa promedio de 28 después de 12000 iteraciones.

Código para cada iteración:

%%%%%%%%% START POSITIVE PHASE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% data = [batchdata(:,:,(batch)) rand(1,numactiondims)>.5]; poshidprobs = softmax(data*vishid + hidbiases); %%%%%%%%% END OF POSITIVE PHASE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% hidstates = softmax_sample(poshidprobs); %%%%%%%%% START ACTION SELECTION PHASE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% if test [negaction poshidprobs] = choose_factored_action(data(1:numdims),hidstates,vishid,hidbiases,visbiases,cdsteps,0); else [negaction poshidprobs] = choose_factored_action(data(1:numdims),hidstates,vishid,hidbiases,visbiases,cdsteps,temp); end data(numdims+1:end) = negaction > rand(numcases,numactiondims); if mod(batch,100) == 1 disp(poshidprobs); disp(min(~xor(repmat(correct_action(:,(batch)),1,size(key_actions,2)), key_actions(:,:)))); end posprods = data'' * poshidprobs; poshidact = poshidprobs; posvisact = data; %%%%%%%%% END OF ACTION SELECTION PHASE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% if batch>5, momentum=.9; else momentum=.5; end; %%%%%%%%% UPDATE WEIGHTS AND BIASES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% F = calcF_softmax2(data,vishid,hidbiases,visbiases,temp); Q = -F; action = data(numdims+1:end); reward = maxreward - sum(abs(correct_action(:,(batch))'' - action)); if correct_action(:,(batch)) == correct_action(:,1) reward_dataA = [reward_dataA reward]; Q_A = [Q_A Q]; else reward_dataB = [reward_dataB reward]; Q_B = [Q_B Q]; end reward_error = sum(reward - Q); rewardsum = rewardsum + reward; errsum = errsum + abs(reward_error); error_data(ind) = reward_error; reward_data(ind) = reward; Q_data(ind) = Q; vishidinc = momentum*vishidinc + ... epsilonw*( (posprods*reward_error)/numcases - weightcost*vishid); visbiasinc = momentum*visbiasinc + (epsilonvb/numcases)*((posvisact)*reward_error - weightcost*visbiases); hidbiasinc = momentum*hidbiasinc + (epsilonhb/numcases)*((poshidact)*reward_error - weightcost*hidbiases); vishid = vishid + vishidinc; hidbiases = hidbiases + hidbiasinc; visbiases = visbiases + visbiasinc; %%%%%%%%%%%%%%%% END OF UPDATES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Lo que estoy pidiendo:

Por lo tanto, si alguno de ustedes puede hacer que este algoritmo funcione correctamente (los autores afirman tener un promedio de ~ 40 recompensas después de 12000 iteraciones), estaría extremadamente agradecido.

Si mi código parece estar haciendo algo obviamente incorrecto, llamar la atención sobre eso también constituiría una gran respuesta.

Espero que lo que los autores dejaron fuera sea obvio para alguien con más experiencia en aprendizaje basado en la energía que yo, en cuyo caso, simplemente señale qué debe incluirse en una implementación en funcionamiento.


No pude hacer que esto funcionara correctamente, pero descubrí que el primer autor, Brian Sallans, está actualmente afiliado a ARC Seibersdorf Research GmbH, Tecnologías de la información, Seibersdorf, Austria y creo que tengo su dirección de correo electrónico, aunque soy no estoy seguro si debería publicarlo directamente en SO - pero puede encontrarlo en este documento - http://publik.tuwien.ac.at/files/pub-et_11432.pdf

espero que esto ayude.