El enfoque aquí es hacer una lectura de los algoritmos de filtrado colaborativo, y más importante para mí algo de conocimiento.
Hay pytorch en alguna función antes de su introducción. .
función de pérdida
errores cuadráticos medios
El método de mínimos cuadrados: método de regresión lineal. En caso de que todo ajuste de curva y la distancia mínima entre el punto de la línea de regresión.
uso general métrica distancia euclídea.
$ L (Y | f (X)) = \ sum \ limits_ {N} (Yf (X)) ^ {2} $
registrar la pérdida de la función logarítmica: función de pérdida de regresión logística es la pérdida de la función logarítmica.
Muestra obedecer la distribución de Bernoulli se asume, y luego encontrar la función de verosimilitud, entonces el número de valor extremo.
$ L (Y | f (X)) = -logP (Y | X) $
la pérdida de la función exponencial: AdaBoost es función de pérdida exponencial.
$ L (Y | f (X)) = exp [-yf (x)] $
CÓDIGO
Importación de la antorcha de torch.autograd importación variable de importación torch.nn AS NN importación torch.nn.functional AS F. de ejemplo = Variable (torch.ones (2,2 y )) A = torch.Tensor (2,2 y ) A [0,0 ] = 0 A [0, 1] 1 =.. A [ 1,0] 2 = A [ 1,1] = 3. objetivo = variable (A) # la muestra: [[1,1], [1,1]] # objetivo: [[0,1], [2,3]] # uso básico Criterio LossCriterion = () # constructor tiene sus propios parámetros Pérdida = Criterion (X, Y) #También pide los parámetros estándar # resultados calculados se han tomado a un promedio mini-lote # L1Loss # error absoluto medio de valores de predicción y el valor verdadero de Criterion = nn.L1Loss () Pérdida = Criterion (Muestra, objetivo) # . 1 # SmoothL1Loss # HuberLoss, error (-1,1) la pérdida de la cuadratura, LL otras pérdidas Criterio = nn.SmoothL1Loss () pérdida = Criterion (Muestra, objetivo) # 0.625 # MSELoss # cuadrados y cuadrado entre las pérdidas, el valor predicho y el valor verdadero la media Criterio = nn.MSELoss () Pérdida = Criterion (Muestra, objetivo) # de 1,5 # nn.NLLLoss #负对数似然损失函数 # pérdida (x, clase) = -x [clase] # pérdida (x, clase) = -weights [clase] * x [Clase] pesos被指定 m = nn.LogSoftmax () pérdida = nn.NLLLoss () # de entrada es de tamaño nBatch x nClasses = 3 x 5 de entrada = torch.autograd.Variable (torch.randn (3, 5), requires_grad = True) # cada elemento de objetivo tiene que tener 0 <= valor <nclasses target = torch.autograd.Variable (torch.LongTensor ([1, 0, 4 ])) de salida = pérdida (m (entrada), objetivo) output.backward ()
optimización
SGD: descenso de gradiente estocástico.
Pequeñas cantidades de cada gradiente iteración se calcula, utilizando la gran cantidad de datos en el conjunto de datos
Momentum: aprovechando el impulso de SGD.
A través de la acumulación de impulso a medida que el uso de gradiente.
AdaGrad: el aprendizaje de las limitaciones de tasa.
Adecuado para la manipulación de gradiente escasa, más sensibles a parámetro global tasa de aprendizaje.
Adam: ajustar dinámicamente cada parámetro de tasa de aprendizaje y segundo orden momentos de primer orden se estima por gradiente.
Después de la corrección de desplazamiento, cada iteración la tasa de aprendizaje tiene un rango definido, el valor del parámetro es relativamente estable.
requisitos de memoria pequeñas para grandes conjuntos de datos y espacio de alta dimensión, también se aplica a la mayoría de optimización no convexa.
CÓDIGO
Importación torch.optim # uso Optimizer = optim.SGD (model.parameters (), LR = 0,01, Momentum = 0,9 ) Optimizer = optim.Adam ([var1, var2], LR = 0,0001 ) # clase base torch.optim.Optimizer (params, por defecto) # params: variable o dict de iterable, especifican qué parámetros deben optimizarse # defecto: contiene las opciones de optimización por defecto diccionario # método: load_state_dict (state_dict) # carga de estado optimizador state_dict () # estado: Guardar optimización dict estado, param_groups: todos los parámetros establecidos zero_grad () # vació gradiente optimizado de variable optimizer.step () # única optimización optimizer.step (cierre) # repite una pluralidad de veces que la función de cálculo, pasando el cierre, las necesidades de cierre para ser vaciados. para la ENTRADA, objetivo en el conjunto de datos: DEF cierre (): optimizer.zero_grad () la salida = Modelo (INPUT) Pérdida = loss_fn (la salida, destino) loss.backward () de retorno Pérdida optimizer.step (cierre) # SGD torch.optim. la SGD (los params, LR = 0,01, 0 = impulso, utilice la amortiguación = 0, 0 = weight_decay, Nesterov = Falso) # los params: parámetros para ser optimizados # LR (un flotador): aprender tasa # impulso (un flotador, opcional): el factor de impulso ( el valor por defecto es 0) #de amortiguación (float, opcional): impulso factor inhibidor (por defecto 0) # weight_decay (un flotador, opcional): amortiguación peso (pena L2) (por defecto 0) # Nesterov (BOOL, opcional): Momentum Nesterov ( el valor predeterminado es Falso) # Adagrad torch.optim.Adagrad (los parametros, LR = 0,01, lr_decay = 0, weight_decay = 0) # lr_decay (un flotador, opcional): el aprendizaje de la caries tasa (por defecto 0) # Adam torch.optim.Adam (los params, LR = de 0,001, betas, = (0,9, 0,999), EPS = 1E-08, weight_decay = 0) # betas, (tupla [un flotador, un flotador], opcional): medios para calcular un promedio de funcionamiento de la plaza del gradiente y gradiente coeficiente (por defecto: 0.9,0.999) # EPS (un flotador, opcional): con el fin de aumentar la estabilidad de la entrada numérica se añade a la denominador en (por defecto: 1e-8)