终于把神经网络算法搞懂了!!

神经网络作为深度学习的基础,广泛应用于图像识别、自然语言处理、语音识别等任务中。

img

神经网络的结构

神经网络主要由输入层、隐藏层和输出层组成。

输入层

输入层用于接收输入数据(例如图像、文本),每个输入节点代表一个特征值,输入层的节点数目与输入数据的特征数目一致。

隐藏层

隐藏层位于输入层和输出层之间,通过对输入数据进行非线性变换来提取特征。

神经网络可以有多个隐藏层,每个隐藏层由若干神经元构成。

隐藏层的层数和神经元数量是神经网络设计中的重要超参数。

输出层

输出最终的预测结果或分类标签。

输出层的神经元数量与任务相关,例如分类任务的输出节点数等于类别数,回归任务通常只有一个输出节点。

神经元的结构

一个神经元的基本功能是将输入数据加权求和并通过激活函数进行处理。

img

具体计算过程为:

在这里插入图片描述

其中:

在这里插入图片描述

常见的激活函数

激活函数的作用是为神经网络引入非线性,使得神经网络能够学习和拟合复杂的函数。

常用的激活函数包括:

  • Sigmoid

    输出值在(0, 1)之间,常用于二分类任务的输出层。

    在这里插入图片描述

  • Tanh

    输出值在-1到1之间,适合中心对称的数据。

    在这里插入图片描述

  • ReLU

    ReLU 将所有负值截断为 0,广泛应用于隐藏层。

    在这里插入图片描述

  • Softmax

    用于多分类任务的输出层,输出概率分布。

在这里插入图片描述

import numpy as np
import matplotlib.pyplot as plt

# 激活函数定义

def sigmoid(x):
    return 1 / (1 + np.exp(-x))

def tanh(x):
    return np.tanh(x)

def relu(x):
    return np.maximum(0, x)

def softmax(x):
    e_x = np.exp(x - np.max(x))  # 防止溢出
    return e_x / e_x.sum(axis=0, keepdims=True)

# 数据范围
x = np.linspace(-10, 10, 400)
y_sigmoid = sigmoid(x)
y_tanh = tanh(x)
y_relu = relu(x)

# 绘制图像
plt.figure(figsize=(12, 8))

plt.subplot(2, 2, 1)
plt.plot(x, y_sigmoid, label="Sigmoid", color="blue")
plt.title("Sigmoid Function")
plt.xlabel("x")
plt.ylabel("sigmoid(x)")

plt.subplot(2, 2, 2)
plt.plot(x, y_tanh, label="Tanh", color="green")
plt.title("Tanh Function")
plt.xlabel("x")
plt.ylabel("tanh(x)")

plt.subplot(2, 2, 3)
plt.plot(x, y_relu, label="ReLU", color="red")
plt.title("ReLU Function")
plt.xlabel("x")
plt.ylabel("relu(x)")

x = np.array([2.0, 1.0, 0.1])
softmax_output = softmax(x)
labels = ['Class 1', 'Class 2', 'Class 3']
plt.subplot(2, 2, 4)
plt.bar(labels, softmax_output, color='skyblue')
plt.title('Softmax Function Output')
plt.xlabel('Classes')
plt.ylabel('Probability')
plt.tight_layout()
plt.show()

img

神经网络的训练过程

神经网络的训练过程是一个迭代优化的过程,主要目标是调整网络中的参数(权重和偏置),使得神经网络能够在给定任务上表现良好。

img

1. 初始化网络结构

神经网络的结构通常由输入层、隐藏层和输出层组成。

每一层都包含若干个神经元或“节点”,每个节点与上一层和下一层的节点通过“权重”相连。

在网络初始化时,权重通常随机初始化,偏置一般初始化为零或小的常数值。

2. 前向传播 (Forward Propagation)

前向传播是计算网络输出的过程

步骤如下:

  • 输入数据

    从输入层开始,网络接收一个输入样本(例如图像的像素值或文本的特征向量)。

  • 加权求和

    每一层的每个神经元会对来自前一层的输入进行加权求和。

    计算公式如下:

在这里插入图片描述

在这里插入图片描述

  • 激活函数

    加权求和后,通过激活函数计算神经元的输出。

    在这里插入图片描述

在这里插入图片描述

  • 输出层

    最终,经过一系列层的前向传播后,网络会输出预测结果。

在这里插入图片描述

3.计算损失

在每次前向传播后,我们需要计算神经网络的预测值与真实值之间的误差。

损失函数用于量化这种误差,不同的任务需要选择不同的损失函数。

  • 回归任务

在这里插入图片描述

其中, 是真实值, 是预测值, 是样本数。

  • 分类任务

在这里插入图片描述

4. 反向传播

反向传播是训练神经网络的核心,它用于计算损失函数关于每个权重的梯度,并通过梯度下降算法来更新权重。

在这里插入图片描述

反向传播的步骤如下

  • 计算损失函数对输出的梯度

    首先,计算损失函数对输出层的梯度(即误差):
    在这里插入图片描述

  • 计算每一层的误差

    然后,通过链式法则逐层将误差向后传播,计算每一层的误差

在这里插入图片描述

  • 计算权重和偏置的梯度

    然后,计算每一层的权重和偏置的梯度

    在这里插入图片描述

5. 参数更新

反向传播计算出每个权重和偏置的梯度后,接下来就是更新权重和偏置。

通常使用梯度下降算法来更新网络的权重和偏置。

更新公式如下

在这里插入图片描述

在这里插入图片描述

6. 迭代训练

训练过程通常会进行多次迭代(称为 epochs),每个 epoch 包括了对训练数据的一次完整的前向传播和反向传播。

案例分享

下面是一个使用神经网络对鸢尾花数据集进行分类的示例代码。

import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.utils import to_categorical

#加载鸢尾花数据集
iris = datasets.load_iris()
X = iris.data
y = iris.target

scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
y_one_hot = to_categorical(y, 3)
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y_one_hot, test_size=0.2, random_state=42)

#构建神经网络模型
model = Sequential()
#输入层和第一个隐藏层
model.add(Dense(64, activation='relu', input_dim=X_train.shape[1]))
#第二个隐藏层
model.add(Dense(32, activation='relu'))
#输出层
model.add(Dense(3, activation='softmax'))  # 3类输出

model.compile(loss='categorical_crossentropy', optimizer=Adam(), metrics=['accuracy'])
history = model.fit(X_train, y_train, epochs=100, batch_size=10, validation_data=(X_test, y_test))

#绘制损失曲线
plt.plot(history.history['loss'], label='Training Loss')
plt.plot(history.history['val_loss'], label='Validation Loss')
plt.title('Loss Curve')
plt.xlabel('Epochs')
plt.ylabel('Loss')
plt.legend()
plt.show()

#评估模型
loss, accuracy = model.evaluate(X_test, y_test)
print(f"Test Loss: {loss:.4f}, Test Accuracy: {accuracy:.4f}")

img

如何学习AI大模型?

大模型时代,火爆出圈的LLM大模型让程序员们开始重新评估自己的本领。 “AI会取代那些行业?”“谁的饭碗又将不保了?”等问题热议不断。

不如成为「掌握AI工具的技术人」,毕竟AI时代,谁先尝试,谁就能占得先机!

想正式转到一些新兴的 AI 行业,不仅需要系统的学习AI大模型。同时也要跟已有的技能结合,辅助编程提效,或上手实操应用,增加自己的职场竞争力。

但是LLM相关的内容很多,现在网上的老课程老教材关于LLM又太少。所以现在小白入门就只能靠自学,学习成本和门槛很高

那么我作为一名热心肠的互联网老兵,我意识到有很多经验和知识值得分享给大家,希望可以帮助到更多学习大模型的人!至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费

👉 福利来袭优快云大礼包:《2025最全AI大模型学习资源包》免费分享,安全可点 👈

全套AGI大模型学习大纲+路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

img

640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

👉学会后的收获:👈
基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

👉 福利来袭优快云大礼包:《2025最全AI大模型学习资源包》免费分享,安全可点 👈

img

这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。

### Transformer算法学习心得 Transformer是一种革命性的神经网络架构,最初由Vaswani等人于2017年提出[^3]。它摒弃了传统的循环神经网络(RNN)和卷积神经网络(CNN),转而采用自注意力机制(Self-Attention Mechanism)。以下是关于Transformer算法的一些核心理解和体会: #### 1. **结构设计的独特性** Transformer的核心在于其完全依赖于注意力机制来捕捉输入序列中的全局关系。相比传统模型,Transformer取消了时间步的概念,使得并行化处理成为可能。这一特性显著提升了训练效率[^3]。 #### 2. **自注意力机制的重要性** 自注意力机制允许模型在同一时刻关注输入的不同部分,从而捕获更丰富的上下文信息。具体来说,通过计算查询向量(Query)、键向量(Key)和值向量(Value)之间的相似度得分,可以动态调整不同位置的权重分布[^3]。这种方法有效地解决了长距离依赖问题,这是RNN难以克服的一个瓶颈。 #### 3. **多头注意力机制的作用** 为了增强表达能力,Transformer引入了多头注意力机制(Multi-head Attention)。该机制通过多个独立的注意力子分别提取不同的特征维度,并最终将它们拼接在一起形成完整的表示[^3]。这种方式不仅增加了模型容量,还能够更好地适应复杂的语义模式。 #### 4. **前馈神经网络应用** 除了注意力模块外,每个编码器/解码器单元还包括两个全连接组成的前馈神经网络(Feed Forward Network, FNN)。这些密集连接有助于进一步变换数据表征形式,提升整体性能表现[^3]。 #### 5. **位置编码的意义** 由于缺乏固有的顺序信息支持,必须显式加入绝对或相对位置编码以帮助模型理解词序排列规律。通常做法是在嵌入矩阵基础上叠加正弦波函数生成的位置信号作为额外输入提供给后续处理步骤使用。 #### 6. **损失函数的选择** 值得注意的是,尽管Transformer应用于自然语言生成任务时采用了逐词预测策略,但它依然沿用了经典的交叉熵损失函数来进行优化目标设定。这表明即使是最先进的技术框架也可能建立在简单有效的理论基础之上。 #### 7. **实际应用中的挑战与发展方向** 尽管取得了巨大成功,但在某些特定场景下仍然面临诸多难题亟待解决。例如当面对超高分辨率图像或者超大规模文本片段时可能会遭遇内存占用过高以及运算速度下降等问题[^1]。为此研究人员提出了多种改进方案如限制注意力建模区域大小、减少输入长度等方式缓解资源消耗压力;同时探索如何有效融合其他经典视觉感知工具比如卷积核操作等手段弥补单一方法局限性也成为热门话题之一[^1]。 此外,在隐私保护日益受到重视的大背景下,“联邦版”的Transformers也开始进入公众视野——即借助分布式协作训练范式让多方共同参与构建共享知识库而不泄露各自敏感资料内容[^2]。这类新兴领域无疑为未来AI发展开辟了全新思路空间值得深入探讨研究下去。 ```python import torch.nn as nn class PositionalEncoding(nn.Module): def __init__(self, d_model, max_len=5000): super(PositionalEncoding, self).__init__() pe = torch.zeros(max_len, d_model) position = torch.arange(0, max_len).unsqueeze(1) div_term = torch.exp(torch.arange(0, d_model, 2) * -(math.log(10000.0) / d_model)) pe[:, 0::2] = torch.sin(position * div_term) pe[:, 1::2] = torch.cos(position * div_term) pe = pe.unsqueeze(0) self.register_buffer('pe', pe) def forward(self, x): return x + self.pe[:, :x.size(1)] ``` 以上代码展示了用于实现位置编码的一种常见方式。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值