code: def create_forward_model(self, encoded_state, encoded_next_state):
          
          combined_input = tf.concat([encoded_state, self.selected_actions], axis=1)
          hidden = tf.layers.dense(combined_input, 256, activation=self.swish)
          # We compare against the concatenation of all observation streams, hence `self.vis_obs_size + int(self.vec_obs_size > 0)`.
          pred_next_state = tf.layers.dense(hidden, self.curiosity_enc_size * (self.vis_obs_size + int(self.vec_obs_size > 0)),
                                            activation=None)
  
          squared_difference = 0.5 * tf.reduce_sum(tf.squared_difference(pred_next_state, encoded_next_state), axis=1)
          self.intrinsic_reward = tf.clip_by_value(self.curiosity_strength * squared_difference, 0, 1)
          self.forward_loss = tf.reduce_mean(tf.dynamic_partition(squared_difference, self.mask, 2)[1])
docs: Creates forward model TensorFlow ops for Curiosity module.
          Predicts encoded future state based on encoded current state and given action.
          :param encoded_state: Tensor corresponding to encoded current state.
          :param encoded_next_state: Tensor corresponding to encoded next state.