大侠幸会,在下全网同名[算法金]
0 基础转 AI 上岸,多个算法赛 Top
[日更万日,让更多人享受智能乐趣]
1.1 概述
神经网络是深度学习算法的基本构建模块。它模拟了人脑的行为,由互相连接的节点组成。这些节点,也被称为“神经元”,模拟了人脑中神经元的功能。每个节点都会接收输入,对其进行处理,并产生输出。这些输出随后可以作为其他节点的输入,形成一个复杂的网络结构。
神经网络是一种机器学习算法,但它与传统机器学习有几个关键区别。最重要的是,神经网络能够自主学习和改进,无需人为干预。它能够直接从数据中学习特征,因此更适合于大型数据集。而在传统机器学习中,特征是手动提供的。
深度学习的一个关键优势是其处理大数据的能力。随着数据量的增加,传统机器学习技术在性能和准确性方面可能变得低效。而深度学习在这方面一直表现出色,使其成为处理数据密集型应用的理想选择。
by towardsdatascience.com
1.4 人工神经网络结构和原理
神经网络中的每个神经元代表着一个计算单元,它接收一组输入,进行一系列计算,并产生一个输出,然后传递给下一层。
神经网络由多层组成,包括输入层、隐藏层和输出层。隐藏层在输入和输出层之间进行一系列非线性变换,以提取输入数据的高级特征。神经网络的结构可以根据任务的需求进行调整,包括隐藏层的数量和每层的神经元数量。
最后,输出层生成网络的最终输出,这可以是一个分类标签、一个连续值或其他类型的输出。
1.5 浅浅的感受一下
设想一个由 28x28 个方格组成的网格,其中一些方格的颜色更加深沉。透过辨识出较亮的方格,我们能够解读出在网格上所描绘的数字。这个网格(数字)称为神经网络的输入。
by 3Blue1Brown
网格中的行按水平方向排列成一维数组,然后被转换为垂直方向的数组,构成了第一层神经元,类似于以下这样;
by 3Blue1Brown
在输入层和输出层之间,设置了一个或多个隐藏层,用于对输入数据进行一系列非线性转换。这些隐藏层的主要目标是提取出对当前任务更有意义的高级特征。
每个隐藏层中的神经元都从前一层的所有神经元接收输入,这一过程在隐藏层的每个神经元上都重复进行,直到达到输出层。
by 3Blue1Brown
来自历史文章 深度学习 Top 10 算法!附 Python 代码实现 的一个简单实例
import tensorflow as tffrom tensorflow.keras.layers import Dense, Flattenfrom tensorflow.keras.models import Sequentialfrom tensorflow.keras.datasets import mnist# 加载数据集(train_images, train_labels), (test_images, test_labels) = mnist.load_data()# 数据预处理train_images = train_images / 255.0test_images = test_images / 255.0# 构建模型model = Sequential([Flatten(input_shape=(28, 28)), # 将图片从2D数组转换为1D数组Dense(128, activation='relu'), # 添加一个具有128个节点的密集连接层Dense(10, activation='softmax') # 添加一个10节点的softmax层,返回10个概率分数的数组])# 编译模型model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])# 训练模型model.fit(train_images, train_labels, epochs=5)# 评估准确率test_loss, test_acc = model.evaluate(test_images, test_labels)print('\nTest accuracy:', test_acc)
核心代码 就 model = Sequential,model.compile 和 model.fit 这三行
就这么简单
看运行后输出,效果还是阔以的:
神经元数学模型图示了输入信号、权重、加权求和、激活函数等组成要素。
在图中,每个输入信号都通过一个权重连接到神经元。这些权重的值在神经网络的训练过程中会被调整,以使得神经网络的输出更接近目标输出。
所有的输入信号都会被加权求和,并加上一个偏移量,然后这个结果会被输入到激活函数中,得到神经元的输出。
这个结果会被输入到激活函数 f 中,得到神经元的输出
这就是神经元的数学模型。
4.1 网络搭建和数据准备
网络结构的设计和数据的准备是神经网络训练的首要步骤。
网络结构的设计包括确定网络的层数、每层的节点数、激活函数的选择等。
数据的准备包括数据的收集、清洗、标注、划分(训练集、验证集和测试集)等。
4.2 训练流程
训练流程包括前向传播和反向传播,通过优化函数更新参数以最小化损失函数。
在前向传播中,网络会接收输入数据,通过每一层的计算得到输出。
然后,这个输出会与目标输出进行比较,计算出损失函数的值。
在反向传播中,网络会根据损失函数的值,通过链式法则计算出每个参数的梯度,然后通过优化函数(如梯度下降)更新参数。
4.3 相关概念:
反向传播:
反向传播是一种高效计算梯度的算法。
它首先计算输出层的梯度,然后反向传播到前面的层,依次计算每一层的梯度。
by machinelearningknowledge.ai
梯度下降:梯度下降是一种优化算法,用于更新神经网络的参数。它会根据每个参数的梯度,沿着梯度的反方向更新参数,以使损失函数的值减小。
epochs:一个 epoch 指的是将所有训练数据都输入到网络中进行一次前向传播和一次反向传播。
batch:由于一次性将所有数据输入到网络可能会导致内存不足,因此我们通常会将数据分成多个 batch,每个 batch 包含一部分数据。在每个 epoch 中,我们会依次将每个 batch 的数据输入到网络中进行训练。
5 神经网络相关概念详解
5.1 损失函数:
不同类型的损失函数介绍
损失函数用于衡量模型输出与真实标签之间的差异。常见的有均方误差(Mean Squared Error, MSE)和交叉熵损失函数(Cross Entropy Loss)等。
- 均方误差:
对于回归问题,我们通常使用均方误差作为损失函数。它计算的是模型预测值与真实值之间的平方差的平均值,公式为
其中
yi 是真实值,
y^i 是预测值,
n 是样本数量。
- 交叉熵损失函数:
对于分类问题,我们通常使用交叉熵损失函数。它计算的是模型预测的概率分布与真实的概率分布之间的差异,公式为
其中 yi 是真实的概率分布,
y^i 是预测的概率分布,
n 是类别数量。
5.2 优化函数:
重点介绍Adam优化算法
优化函数用于更新神经网络参数以最小化损失函数。
常见的优化函数有梯度下降(Gradient Descent)、随机梯度下降(Stochastic Gradient Descent, SGD)、动量法(Momentum)、RMSProp等。
其中,Adam优化算法结合了动量法和RMSProp的优点,被广泛应用。
- Adam优化算法:
Adam是一种自适应学习率的优化算法,它结合了动量法和RMSProp的优点。动量法可以加速优化的过程,使参数更新更加平滑;RMSProp可以自适应地调整学习率。
Adam在这两者的基础上,引入了一阶矩估计(即动量项)和二阶矩估计(即RMSProp项),使得参数更新更加稳定和高效。
进入免费知识星球一起交流 ↑
关注公众号,围观日更万日 ↓
- 科研为国分忧,创新与民造福 -
- 本文含算法金广告,大侠且看且细品 -