
神经网络如同数字世界的造脑工程:
整个过程展现了"简单单元→复杂智能"的涌现哲学,是连接主义AI的基石。
import org.nd4j.linalg.api.ndarray.INDArray;
import org.nd4j.linalg.factory.Nd4j;
public class NeuralNetwork {
private INDArray W1, b1, W2, b2; // 参数矩阵
private final double learningRate;
public NeuralNetwork(double lr) {
this.learningRate = lr;
// 初始化参数:输入层2节点,隐藏层3节点,输出层1节点
W1 = Nd4j.randn(2, 3).mul(0.01);
b1 = Nd4j.zeros(1, 3);
W2 = Nd4j.randn(3, 1).mul(0.01);
b2 = Nd4j.zeros(1, 1);
}
// 前向传播
public INDArray forward(INDArray X) {
INDArray Z1 = X.mmul(W1).add(b1);
INDArray A1 = sigmoid(Z1);
INDArray Z2 = A1.mmul(W2).add(b2);
return sigmoid(Z2);
}
// 反向传播
public void backward(INDArray X, INDArray Y) {
// 前向计算
INDArray Z1 = X.mmul(W1).add(b1);
INDArray A1 = sigmoid(Z1);
INDArray Z2 = A1.mmul(W2).add(b2);
INDArray A2 = sigmoid(Z2);
// 计算梯度
INDArray dZ2 = A2.sub(Y);
INDArray dW2 = A1.transpose().mmul(dZ2);
INDArray db2 = dZ2.sum(0);
INDArray dZ1 = dZ2.mmul(W2.transpose()).mul(A1.sub(A1.mul(A1)));
INDArray dW1 = X.transpose().mmul(dZ1);
INDArray db1 = dZ1.sum(0);
// 参数更新
W1.subi(dW1.mul(learningRate));
b1.subi(db1.mul(learningRate));
W2.subi(dW2.mul(learningRate));
b2.subi(db2.mul(learningRate));
}
private INDArray sigmoid(INDArray x) {
return Nd4j.ones(x.shape()).div(Nd4j.exp(x.neg()).add(1.0));
}
public static void main(String[] args) {
// XOR问题示例
INDArray X = Nd4j.create(new double[][]{{0,0}, {0,1}, {1,0}, {1,1}});
INDArray Y = Nd4j.create(new double[][]{{0}, {1}, {1}, {0}});
NeuralNetwork nn = new NeuralNetwork(0.1);
for(int i=0; i<10000; i++) {
nn.backward(X, Y);
}
System.out.println(nn.forward(X)); // 应接近目标值
}
}指标 | 数值 | 说明 |
|---|---|---|
训练时间复杂度 | O(b×l×n²) | b:批量大小 l:层数 n:平均节点数 |
推理时间复杂度 | O(l×n²) | 前向传播计算 |
空间复杂度 | O(l×n²) | 存储参数和梯度 |
关键突破:
工业案例:
新手必练:
// 使用Deeplearning4J构建CNN
MultiLayerConfiguration config = new NeuralNetConfiguration.Builder()
.updater(new Adam(0.001))
.list()
.layer(new ConvolutionLayer.Builder(5,5).nIn(1).nOut(20).build())
.layer(new SubsamplingLayer.Builder().poolingType(PoolingType.MAX).build())
.layer(new DenseLayer.Builder().nOut(500).build())
.layer(new OutputLayer.Builder(LossFunctions.LossFunction.NEGATIVELOGLIKELIHOOD).nOut(10).activation(Activation.SOFTMAX).build())
.build();高手进阶:
// 自注意力机制核心计算
INDArray Q = input.mmul(WQ);
INDArray K = input.mmul(WK);
INDArray V = input.mmul(WV);
INDArray scores = Q.mmul(K.transpose()).div(Math.sqrt(d_k));
INDArray attention = Nd4j.getExecutioner().exec(new SoftMax(scores, 1));
INDArray output = attention.mmul(V);神经网络教会我们:
当你能在蛋白质折叠预测中复现AlphaFold的精度时,说明真正掌握了深度学习的精髓——这不仅需要算法理解,更需要跨学科的视野。记住:现代神经网络正在重定义"智能"的边界,从图像生成到核聚变控制,这是人类历史上首次用同一套数学工具解决如此广泛的问题。未来属于那些能驾驭这种力量并赋予人文关怀的工程师。