神经网络最小化函数

Neural Network Minimize Function

我创建了一个简单的神经网络;为了实际训练它,我需要知道需要在哪个方向调整权重和偏差。我读过一些关于这个主题的文章,但我并不擅长数学,我唯一理解的是成本函数(我设法开始工作)需要最小化。如果有人至少可以从理论上告诉我这是如何工作的,那就太好了。如果需要,我还可以 post 更多代码。最小化函数最终应该替换 evolve():

import java.util.Random;

public class Neuron {
Neuron[] input;
float[] weight;
float bias;
Float value = null;
public Neuron(Neuron[] input) {
    this.input = input;
    weight = new float[input.length];
    setRandom();
}
public void setValue(float val) {
    this.value = val;
}
public float getValue() {
    if(this.value == null) {
        return calculate();
    }
    else {
        return this.value;
    }
}
private float calculate() {
    float res = 0;
    for(int i = 0; i < input.length; i++) {
        res += input[i].getValue() * weight[i];
    }
    res -= bias;
    return sigmoid(res);
}
private void setRandom() {
    Random rand = new Random();
    float max = 0;
    for(int i = 0; i < weight.length; i++) {
        weight[i] = rand.nextFloat();
        max += weight[i];
    }
    this.bias = max * 0.8f - rand.nextFloat();
}
public void evolve() {
    Random rand = new Random();
    for(int i = 0; i < weight.length; i++) {
        weight[i] += rand.nextFloat() - 0.5f;
    }
    this.bias += rand.nextFloat() - 0.5f;
}

public static float sigmoid(float x) {
    return (float)(1/( 1 + Math.pow(Math.E,(-1*(double)x))));
  }
}

成本函数基本上是真实数据点与您的预测之间的差异的函数(即,这是您的惩罚)。为了争论起见,你的神经网络是 f(x) = 2x + 1。现在,假设您观察到的真实数据点是 x = 1y = 4。因此您的预测 (f(1)) 是 3.

如果您的成本函数是实际观测值与预测值之间的绝对差,即 |f(x) - y| 您的成本函数的值为 1(对于 x = 1),您需要最小化这个代价函数。但是,如果您的成本函数是 100 - |f(x) - y|,您可能希望最大化它。在此成本函数中,您的最大奖励是 100.

因此,您的权重和偏差需要朝着使您更接近最小化惩罚和最大化奖励的方向移动。您的预测越接近观察到的数据集值,奖励越高,惩罚越小。

备注:

  1. 这是对所涉及数学的严重过度简化,但它应该可以帮助您入门。另请阅读机器学习中的 overfitting

  2. 为了理解机器学习理论 Cross Validated 会是更好的论坛。