Регуляризация L1 не заставляет весовые параметры становиться нулевыми - PullRequest
0 голосов
/ 05 марта 2020

Моя цель - тренировка автоэнкодера через SGD. Используя тензор потока 1.x, я добавил регуляризацию L1 для своей функции потерь, например:

    ........
    ........

    beta = 10e-3

    n_inputs = X_Train.shape[1]
    n_outputs = n_inputs

    X = tf.placeholder(tf.float32, shape=[None, n_inputs])

    weights1 = tf.get_variable("weights1", shape=[n_inputs, n_hidden], dtype=tf.float32, initializer = tf.contrib.layers.variance_scaling_initializer())  
    weights2 = tf.get_variable("weights2", shape=[n_hidden, n_outputs], dtype=tf.float32, initializer = tf.contrib.layers.variance_scaling_initializer())

    biases1 = tf.get_variable("biases1", shape=[n_hidden], initializer = tf.zeros_initializer())
    biases2 = tf.get_variable("biases2", shape=[n_outputs], initializer = tf.zeros_initializer())

    hidden = activation(tf.matmul(X, weights1) + biases1)
    outputs = tf.matmul(hidden, weights2) + biases2 

    reconstruction_loss = tf.reduce_mean(tf.square(outputs - X))
    reg_loss = beta * (tf.reduce_sum(tf.abs(weights1)) + tf.reduce_sum(tf.abs(weights2))) 

    loss = reconstruction_loss + reg_loss 

    training_op = tf.train.AdamOptimizer(learning_rate).optimizer.minimize(loss)

    init = tf.global_variables_initializer()
    .......
    .......

После тренировки я посчитал число ноль в матрице weights1. Я обнаружил, что все веса1 [i] [j] ≠ 0. В чем проблема?

1 Ответ

0 голосов
/ 05 марта 2020

Регуляризация L1 делает сеть pu sh бесполезным весом к 0, но она не присваивает им 0 грубой силой. Они будут приближаться к 0, но не к 0.

см .: Является ли регуляризация L1 в Keras / Tensorflow * действительно * регуляризацией L1?

для подробных ответов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...