目录
1. 引言
2. 机器学习基础
1. 数据预处理
2. 特征提取
3. 常见算法
3. 深度学习基础
1. 神经网络的基本概念
1. 神经元(Neuron)
2. 权重(Weight)
3. 偏置(Bias)
4. 激活函数(Activation Function)
5. 前向传播(Forward Propagation)
6. 损失函数(Loss Function)
7. 反向传播(Backward Propagation, Backprop)
8. 学习率(Learning Rate)
9. 训练(Training)
10. 梯度下降(Gradient Descent)
11. 批量(Batch)和批量大小(Batch Size)
12. 过拟合(Overfitting)
13. 权重初始化(Weight Initialization)
14. 正则化(Regularization)
15. 迭代(Epoch)
3. 机器学习与深度学习的关系
4. 学习路径与资源
4. 结论
1. 机器学习(Machine Learning)
2. 深度学习(Deep Learning)
3.主要差异
1. 引言
- 介绍机器学习和深度学习的基本概念以及快速上手。
- 文章目的:为初学者提供入门知识和学习路径。
举个例子:如果我们想让计算机判断一张图片里是猫还是狗,我们可以让计算机查看很多猫和狗的图片,并学习它们的不同特征(比如猫的耳朵形状、狗的鼻子等)。一旦学会了这些特征,计算机就能自己判断一张新的图片是猫还是狗。
机器学习的核心就是数据和模型:计算机通过分析数据来创建模型,然后用这个模型来做预测。
在实际上,特征其实就是一个数字,这个数字往往牵扯到概率,矩阵,向量等等,但是最终的表现就是一个有特定意义的数。
深度学习是机器学习的一种特殊形式,它使用了一种叫“神经网络”的方法来处理更加复杂的数据。神经网络灵感来自大脑的工作原理,它通过大量的“神经元”层级相互连接,模拟人脑处理信息的方式。每一层都能从前一层获得信息并进行处理,逐步提高判断的准确性。
深度学习的原理其实和机器学习初步入门的原理一样,之所以称之为深度学习,主要是因为计算的够深入,数字层的意义更深刻(很难说明这个数到底表示的是什么)。
基本步骤:计算 → 激活 →计算 → 激活 → 数据映射 → 由已知结果反向优化模型 → 循环直到模型优化完成(表现为准确性等参数足够优秀)
简而言之,无论是机器学习或是深度学习都可以简单理解为y = wx + b ,用y 反向优化w和b的一个过程。如果是学习理论,毫无疑问是需要大量厚实的数学基础的,但是如果仅仅只是当成工具使用来解决问题的话,那么学习难度不会特别大,python的机器学习库帮我们解决了学习成本的问题。
2. 机器学习基础
- 什么是机器学习
- 定义:让机器从数据中学习并做出预测或决策。
- 机器学习的工作原理
- 数据预处理与特征提取。
- 模型选择与训练。
- 模型评估:精确度、召回率、F1分数等。
1. 数据预处理
数据预处理是指对原始数据进行清洗、转换和处理的过程,确保数据能够更好地用于训练机器学习模型。因为在现实世界中,原始数据往往是不完整的、杂乱的或者不规范的,因此需要进行处理才能提取出有用的信息。
常见的数据预处理步骤:
-
处理缺失值:很多时候,数据集中的某些数据可能缺失。处理缺失值的方式有几种,比如:
- 删除包含缺失值的行或列(如果缺失的数量很少)。
- 用其他值填补缺失的部分,比如用平均值、中位数或者最常见的值填充缺失值。
-
数据归一化与标准化:不同的特征可能有不同的单位和范围,这样会导致某些特征对模型的影响过大,而其他特征的影响被忽视。为了避免这种情况,我们通常需要对数据进行标准化或归一化:
- 归一化:把数据缩放到一个固定的范围内(如0到1)。
- 标准化:将数据转换为均值为0,标准差为1的形式。
-
数据清洗:包括去除重复数据、处理异常值(如极端偏离正常范围的值)等。异常值可能会干扰模型的学习,影响预测效果。
-
分类数据编码:有些数据是以文本的形式存在(例如,“男”和“女”,“是”和“否”)。机器学习模型无法直接处理这些非数字型数据,因此需要将这些分类数据转换为数字编码。常见的方法有:
- 标签编码:将不同的类别映射为不同的数字(比如“男”映射为0,“女”映射为1)。
- 独热编码(One-Hot Encoding):为每个类别创建一个新的列,并用0或1表示该类别是否出现。
2. 特征提取
特征(某个指标,量化为数字)提取是指从原始数据中提取出有助于模型学习的关键特征。特征是模型用来做判断的依据,因此提取出合适的特征对于提高模型的性能非常重要。
常见的特征提取方法:
-
选择重要特征:并不是所有的原始数据都会对模型有帮助。通过某些方法(如相关性分析、方差分析等),我们可以识别出哪些特征对目标变量(例如预测的结果)有更大的影响,选择这些重要特征用于训练模型。这样可以减少计算量,并提高模型的性能。
-
创建新的特征:有时,单独的原始特征并不足以表示数据的真正含义。我们可以通过将多个特征组合或转换成新的特征来提高模型的表现。例如,假设我们有“身高”和“体重”这两个特征,我们可以创建一个新特征——“体重指数(BMI)”,这个特征可能比单独的身高或体重更能反映健康状况。
-
降维:当数据集的特征非常多时,计算和存储可能会变得非常复杂。为了减少计算成本并提高模型效率,我们可以使用一些降维技术,如主成分分析(PCA),将数据从高维空间压缩到低维空间,保留大部分信息。比如图像数据维度很高,降维到用数组,低维矩阵表示。
数据的 质量和数量 胜过一切高智能代码,数据是才是机器学习的灵魂所在
3. 常见算法
- 线性回归、逻辑回归。
- 决策树、随机森林。
- 支持向量机(SVM)。
- K-近邻算法(KNN)。
算法的基本逻辑各不相同,一般先学习决策树,当理解了决策树的算法逻辑后,其他算法也一通百通。
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
from sklearn import tree
import matplotlib.pyplot as plt
# 加载数据集
iris = load_iris()
# X为数据集 y为想要得到的预测结果
X, y = iris.data, iris.target
# 创建决策树分类器,指定分裂标准为“信息增益(entropy)”
clf = DecisionTreeClassifier(criterion='entropy', max_depth=3, random_state=42)
# 训练模型
clf.fit(X, y)
# 输出预测结果
sample = [[5.0, 3.5, 1.6, 0.3]] # 测试样本
print(f"预测类别: {clf.predict(sample)}")
# 可视化决策树
plt.figure(figsize=(12, 8))
tree.plot_tree(clf, feature_names=iris.feature_names, class_names=iris.target_names, filled=True)
plt.show()
使用决策树
决策树的基本原理
-
寻找最佳问题(分裂点)
决策树会找那些“最能区分数据”的问题来问,比如:- 哪个特征能最大程度地把数据分成有用的子集?
它衡量每个特征的“区分能力”(如纯度提升,专业术语叫信息增益或基尼指数),然后选择效果最好的特征来分裂数据。
- 哪个特征能最大程度地把数据分成有用的子集?
-
逐层问问题
决策树就像玩“猜猜我是谁”的游戏,每次问题都让范围更小、更明确,直到能准确锁定答案。 -
停止的条件
- 当数据已经被完全分清楚(比如同一组数据都属于同一个类别)。
- 或者达到限制条件(比如树的深度不能太大,避免过于复杂)。
使用机器学习模型的基本流程:
清洗数据→拆分数据集(训练集,验证集)→训练→检查模型评价指标→打包使用模型
- 机器学习的应用
- 图像分类、文本分析、预测建模等。
3. 深度学习基础
- 什么是深度学习
- 定义:基于人工神经网络的机器学习方法,通常包含多层隐藏层(用于计算的黑盒子)。
- 与传统机器学习的区别:更强的建模能力,适用于复杂的数据结构(自然语言与影像)
1. 神经网络的基本概念
深度学习的部分,建议先对机器学习有一定理解,且有一定的线性代数,数学基础再往下学习。
基本概念
神经网络是一种模拟人类大脑的计算模型,用来解决复杂的问题,比如图像识别、语音识别等。它虽然听起来很复杂,但其实就是由许多“神经元”组成的“层”结构。下面我会用人话解释一些概念。
1. 神经元(Neuron)
- 专业说法:神经元是神经网络的基本单位,用来接收和处理信息。
- 简单理解:神经元就像一个“微型计算器”,它接收输入信息(数据),进行简单的计算(比如加权、加和),然后产生一个输出结果。
2. 权重(Weight)
- 专业说法:权重是连接两个神经元之间的系数,表示输入数据的重要性。
- 简单理解:权重就像你给每个输入打的“分数”,它决定了哪个输入更重要。如果权重大,表示这个输入对结果的影响更大;如果权重小,说明它的重要性不高。
3. 偏置(Bias)
- 专业说法:偏置是神经元的一个额外参数,用于调整模型的输出。
- 简单理解:偏置就像你给答案加的“底分”。比如,所有输入加起来是50,但偏置是10,那最终结果就是60。它帮助模型更灵活地调整输出。
4. 激活函数(Activation Function)
- 专业说法:激活函数是对神经元的输出进行非线性变换的函数。
- 简单理解:激活函数就像一个“开关”或“过滤器”,决定了神经元的输出值。比如:
- 有的激活函数会把负数变成0(只保留正数),就像过滤掉无用的信息。
- 有的激活函数会把输出限制在一个范围内(比如0到1之间),这样不会让结果跑得太夸张。
5. 前向传播(Forward Propagation)
- 专业说法:前向传播是将输入数据依次通过网络层,计算输出的过程。
- 简单理解:前向传播就是“从头到尾算一遍”。你把输入数据(比如一张图片)送进网络,网络逐层处理,最后得出一个结果(比如判断图片中有一只猫)。
6. 损失函数(Loss Function)
- 专业说法:损失函数是衡量模型输出结果与真实值之间误差的函数。
- 简单理解:损失函数就像一个“错误检测器”,告诉你模型表现得有多差。如果预测和真实值差得远,损失就会很大;如果预测接近真实值,损失就很小。
7. 反向传播(Backward Propagation, Backprop)
- 专业说法:反向传播是一种优化算法,用于通过计算损失函数对参数(权重和偏置)的梯度,更新模型参数。
- 简单理解:反向传播就是“纠错机制”。通过损失函数,神经网络知道“哪里算错了”,然后一步步倒着推算,调整每一层的参数(权重和偏置),让下次预测更准确。
8. 学习率(Learning Rate)
- 专业说法:学习率是控制每次参数更新步长的超参数。
- 简单理解:学习率就像调节模型“学习速度”的按钮。步子太大(学习率太高),可能会错过最佳答案;步子太小(学习率太低),模型会学得很慢。
9. 训练(Training)
- 专业说法:训练是通过不断优化模型参数,使其能够在给定任务中表现更好的过程。
- 简单理解:训练就像“教神经网络学会一件事”。你不断地给它喂数据,告诉它答案是什么,然后它通过前向传播、计算损失、反向传播来调整自己,直到学得差不多。
10. 梯度下降(Gradient Descent)
- 专业说法:梯度下降是一种优化算法,用于根据损失函数的梯度调整参数以最小化损失。
- 简单理解:梯度下降就像“下山找最低点”。损失函数就像山上的地形图,而神经网络通过计算“往哪个方向坡度更陡”来决定调整权重的方向,最终达到“最低点”(最小的损失)。
11. 批量(Batch)和批量大小(Batch Size)
- 专业说法:批量是指在一次训练中用来更新模型的样本集合,批量大小是每次训练的样本数量。
- 简单理解:批量大小就像一次学习时“翻几页书”。如果批量小(比如一次只用1条数据),学习会很慢;如果批量太大,可能会占用过多内存或计算资源。
12. 过拟合(Overfitting)
- 专业说法:过拟合是指模型在训练集上表现很好,但在新数据上表现不佳的问题。
- 简单理解:过拟合就像“死记硬背”。模型学会了训练数据中的所有细节,但遇到新数据却不知道该怎么做了。
13. 权重初始化(Weight Initialization)
- 专业说法:权重初始化是神经网络开始训练时,对权重赋予初始值的过程。
- 简单理解:权重初始化就像给网络“分配起点”。如果起点选得不好(比如全是0或太大),可能会让网络学得很慢甚至学不到东西。
14. 正则化(Regularization)
- 专业说法:正则化是通过添加惩罚项防止模型过拟合的方法。
- 简单理解:正则化就像在考试中“限制死记硬背”,强迫模型不光关注训练数据,还要学会对新数据也能做出好预测。
15. 迭代(Epoch)
- 专业说法:迭代是指对整个训练集进行一次完整的前向传播和反向传播。
- 简单理解:迭代就像“复习了一遍所有内容”。每迭代一次,模型就从数据中学到更多东西。
2. 常见的深度学习模型
- 前馈神经网络(Feedforward Neural Networks, FNN)。
- 卷积神经网络(CNN):用于图像处理。
- 循环神经网络(RNN):用于序列数据处理。
- 【神经网络】大白话直观理解!_哔哩哔哩_bilibili
- 【卷积】直观形象的实例,10分钟彻底搞懂_哔哩哔哩_bilibili
下面是一份简单的CNN模型举例代码:
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout
from tensorflow.keras.optimizers import Adam
# 数据集准备
# 使用MNIST数据集作为示例
(x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data()
# 数据预处理
# 将训练集和测试集的图像数据调整为4D张量(样本数, 高, 宽, 通道),同时归一化到0-1范围
x_train = x_train.reshape(-1, 28, 28, 1).astype('float32') / 255.0
x_test = x_test.reshape(-1, 28, 28, 1).astype('float32') / 255.0
# 将标签转换为独热编码(one-hot encoding)格式,便于分类任务
y_train = tf.keras.utils.to_categorical(y_train, 10)
y_test = tf.keras.utils.to_categorical(y_test, 10)
# 定义CNN模型
model = Sequential([
# 第一层卷积层,32个3x3大小的滤波器,激活函数为ReLU,输入尺寸为28x28x1(灰度图)
Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)),
# 最大池化层,用2x2窗口对特征图进行下采样,减少尺寸
MaxPooling2D(pool_size=(2, 2)),
# 第二层卷积层,64个3x3大小的滤波器,激活函数为ReLU
Conv2D(64, (3, 3), activation='relu'),
# 第二层最大池化层,用2x2窗口对特征图进行下采样
MaxPooling2D(pool_size=(2, 2)),
# 将三维特征图转换为一维向量,便于连接全连接层
Flatten(),
# 全连接层,包含128个神经元,激活函数为ReLU
Dense(128, activation='relu'),
# Dropout层,随机丢弃50%的神经元以减少过拟合
Dropout(0.5),
# 输出层,10个神经元,对应10个类别,激活函数为softmax(输出概率分布)
Dense(10, activation='softmax')
])
# 编译模型
# 优化器使用Adam,自适应调整学习率
# 损失函数为交叉熵损失,适用于多分类任务
# 评估指标为准确率
model.compile(optimizer=Adam(learning_rate=0.001),
loss='categorical_crossentropy',
metrics=['accuracy'])
# 打印模型摘要
# 显示模型各层的参数数量和输出形状,便于了解模型结构
model.summary()
# 训练模型
# 在训练集上进行10轮迭代,每次使用32个样本进行更新
# 将20%的训练数据用于验证,以监控模型的表现
model.fit(x_train, y_train, epochs=10, batch_size=32, validation_split=0.2)
# 测试模型
# 在测试集上评估模型的损失值和准确率
# 输出测试集的分类准确率
test_loss, test_accuracy = model.evaluate(x_test, y_test)
print(f"Test Accuracy: {test_accuracy * 100:.2f}%")
# 保存模型
# 将训练好的模型保存为HDF5文件,便于后续加载和使用
model.save("cnn_model.h5")
- 深度学习的应用
- 图像分类、目标检测、自然语言处理(NLP)、生成对抗网络(GAN)等。
3. 机器学习与深度学习的关系
- 机器学习是深度学习的基础。
- 深度学习是机器学习的一个子集,适用于处理大规模、复杂的数据。
4. 学习路径与资源
- 入门资源
- 在线课程(如bilibili)。
- 豆包,GPT等AI(强推)
- 实践平台
- Kaggle:用于练习和参加机器学习竞赛。
- GitHub:查阅开源代码和项目。
- 编程语言和工具
- Python:最流行的机器学习与深度学习语言。
- 库与框架:Scikit-learn, TensorFlow, PyTorch。
4. 结论
- 总结机器学习与深度学习的基本概念与差异。
1. 机器学习(Machine Learning)
机器学习是一种让计算机通过分析数据自己学习规律的技术。它的目标是通过训练模型来完成特定任务,比如分类、预测等,而不需要人工编写特定规则。
- 特点:
- 依赖特征工程:需要人为提取和选择关键特征。
- 应用广泛:适用于较小规模数据或特征清晰的任务。
- 常见算法:线性回归、逻辑回归、支持向量机(SVM)、决策树、随机森林、K-均值等。
2. 深度学习(Deep Learning)
深度学习是机器学习的一个分支,基于人工神经网络(尤其是多层神经网络),通过端到端学习方式自动提取特征和完成任务。它通常需要大量数据和计算资源。
- 特点:
- 自动特征提取:不需要人工设计特征。
- 擅长处理复杂数据:如图像、语音、文本等。
- 常见模型:卷积神经网络(CNN)、循环神经网络(RNN)、生成对抗网络(GAN)、Transformer 等。
3.主要差异
方面 | 机器学习 | 深度学习 |
---|---|---|
数据依赖性 | 适合较小规模数据(如几百到几千条样本)。 | 需要大量数据(如上万甚至数百万条样本)才能表现出色。 |
特征提取方式 | 人工设计特征,需要领域专家的参与。 | 自动从数据中提取特征,不需要人为干预。 |
计算资源 | 计算需求较低,用普通计算机即可完成。 | 计算需求较高,需要 GPU 或 TPU 等高性能硬件支持。 |
模型结构 | 通常是基于数学公式和统计方法的浅层模型(如线性模型、决策树)。 | 基于多层神经网络的复杂结构(如深层卷积网络)。 |
适用任务 | 适用于简单任务,如预测房价、信用评分等。 | 擅长复杂任务,如图像识别、语音识别、自然语言处理等。 |
学习方式 | 对单一任务进行建模,结果可解释性较强。 | 能处理端到端任务,模型复杂但结果可解释性较弱。 |
训练时间 | 训练速度较快,一般几分钟到几小时即可完成。 | 训练速度较慢,复杂模型可能需要几小时甚至几天。 |
文末,我想说明一下,无论是机器学习还是深度学习,本质上还是用以解决问题的工具,初学者从了解到入手其实并不困难,实践的困难性在于两点:领域内更深层次的理解,数据的数量以及质量。kaggle给我们提供了不错的练习数据集以及学习社区,此文意在记录本人的学习过程以及一些浅显的理解,希望对大家有用。