AI学习网站

神经网络入门

神经网络是一种模仿人脑神经元连接方式设计的计算模型,它能够从海量数据中自动学习规律,完成识别、预测、决策等任务

标签:

神经网络是一种模仿人脑神经元连接方式设计的计算模型,它能够从海量数据中自动学习规律,完成识别、预测、决策等任务。

一个形象的类比
想象一下,教一个孩子认识“猫”的过程。你不需要告诉他“猫有尖耳朵、长尾巴、会喵喵叫”这些具体规则(这就像传统编程),而是直接给他看成千上万张猫的图片。他的大脑会自己“琢磨”出猫的共同特征。神经网络的工作原理与此类似——通过分析大量“例子”(数据),自动总结出其中的模式和规律。

二、神经网络长什么样?——核心结构

一个标准的神经网络由层层堆叠的“层”组成,主要有三个部分:

结构名称 形象比喻 核心作用
输入层 眼睛和耳朵 接收原始信息(如图片的像素、句子的单词),是信息的“入口”。
隐藏层 大脑皮层 对信息进行层层加工和提炼。它把输入层的简单信息,一步步抽象成更高层、更复杂的特征。层数越多(即“深度”学习),能学到的模式就越复杂。
输出层 嘴巴或手 输出最终的结果,比如判断出“这是一只猫”或预测明天的“股票价格”。

一个神经元是如何工作的?
每个神经元内部都进行着非常简单的两步运算:

  1. 收集信息:将输入进来的所有信息(用x表示)乘以各自的重要性(用权重w表示),并加总起来(有时还会加上一个基础值,即偏置b)。

  2. 决定是否激活:将加总后的结果送入一个“激活函数”,判断这个信息是否重要到需要传递下去,并转换成非线性的信号输出。这个“激活函数”就是神经网络能处理复杂问题的关键。

三、神经网络如何学习?——核心工作原理

学习过程可以简化为“猜答案 -> 看差距 -> 调参数 -> 再来一次”的循环,这背后是前向传播反向传播在起作用。

  1. 前向传播(猜答案):给网络一张手写数字“3”的图片,它用当前的参数(随机初始化的权重和偏置)计算一遍,得出一个初步结论,比如“这是5”。这显然错了。

  2. 计算损失(看差距):用一个“损失函数”来衡量预测结果(5)和正确答案(3)之间的差距。差距越大,说明当前模型越差。

  3. 反向传播(找责任):这是学习的核心。系统会反向推导,看看网络中的每一个“参数”(权重和偏置)对这个“差距”负有多大责任。这就像找出是哪个环节的调整导致了最终的错误。

  4. 优化参数(调参数):根据责任大小,利用“优化算法”(如梯度下降法)微调每个参数,目标是让下次的差距变小一点。这个过程会不断重复,直到模型的预测足够准确。

四、动手实践:用代码实现你的第一个神经网络

纸上得来终觉浅,让我们用Python和TensorFlow框架,亲手搭建一个能识别手写数字的简单神经网络(基于经典的MNIST数据集)。

python
import tensorflow as tf
from tensorflow.keras import layers, models
from tensorflow.keras.datasets import mnist

# 1. 加载和准备数据
(x_train, y_train), (x_test, y_test) = mnist.load_data()
# 数据预处理:将图片的像素值从0-255归一化到0-1,并把28x28的图片拉平为784个像素点的一维数组
x_train = x_train.reshape(-1, 784).astype('float32') / 255.0
x_test = x_test.reshape(-1, 784).astype('float32') / 255.0

# 2. 构建模型
model = models.Sequential([
    # 输入层(通过input_shape指定输入数据的形状,即784个像素点)
    # 第一个隐藏层:128个神经元,使用ReLU激活函数
    layers.Dense(128, activation='relu', input_shape=(784,)),
    # 第二个隐藏层:64个神经元,使用ReLU激活函数
    layers.Dense(64, activation='relu'),
    # 输出层:10个神经元(对应0-9十个数字),使用softmax激活函数输出概率
    layers.Dense(10, activation='softmax')
])

# 3. 编译模型
model.compile(optimizer='adam',  # 优化器
              loss='sparse_categorical_crossentropy', # 损失函数
              metrics=['accuracy']) # 评估指标

# 4. 训练模型
print("开始训练...")
model.fit(x_train, y_train, epochs=5, batch_size=32, validation_split=0.1)

# 5. 评估模型
test_loss, test_acc = model.evaluate(x_test, y_test, verbose=0)
print(f'\n测试集准确率: {test_acc:.4f}') # 你应该能看到一个不错的准确率(约97%以上)

这段代码清晰地展示了构建一个神经网络的全流程:数据准备 -> 模型搭建 -> 编译 -> 训练 -> 评估

五、关键概念小贴士

  • 激活函数:为网络引入非线性,使其能学习复杂的模式。ReLU是目前最常用的选择,因为它计算简单且能缓解梯度消失问题。

  • 优化器:负责更新网络权重以减小损失。Adam 是一个高效且常用的优化器。

  • 损失函数:衡量模型预测值与真实值之间的差距。交叉熵常用于分类任务。

六、如何系统学习?

  1. 夯实基础:理解上述核心概念。推荐一门非常棒的免费课程:国家高等教育智慧教育平台上的 《神经网络理论及应用》,由北京工商大学名师主讲,系统且权威。

  2. 动手实战:亲自运行上面的代码,尝试修改层数、神经元个数,观察对结果的影响。Kaggle竞赛和阿里云天池是很好的练手场。

  3. 深入探索:当你熟悉了基础的前馈神经网络后,可以进一步探索卷积神经网络(CNN) 来处理图像,循环神经网络(RNN) 来处理序列(如文本、时间序列)数据,以及强大的 Transformer 架构。

数据统计

相关导航