当前位置: 首页 > news >正文

基础NLP | 02 深度学习基本原理

文章目录

  • 深度学习基本原理
    • 数学基础
      • 线代
      • numpy 常用操作
      • 导数, 梯度
      • 梯度下降法
        • 梯度下降代码 GradientDescent.py
        • 反向传播
        • 完整的反向传播过程
        • 权重更新方式
  • pytorch
      • 网络结构
        • 全连接层 (线性层)
          • 例子 - 手动实现模拟一个线性层 DNNforward.py
        • 激活函数
          • 激活函数-Sigmoid
          • 激活函数-tanh
          • 激活函数-relu
          • 激活函数-Gelu
          • 激活函数-Softmax
      • 损失函数
        • 均方差
        • 交叉熵
          • 例子-手动实现交叉熵-CrossEntropy.py
      • 代码 - 二分类任务

深度学习基本原理

数学基础

线代

向量运算

  • 加和
  • 内积
  • 向量夹角余旋值

矩阵

  • 加法
  • 乘法
  • 转置

向量到矩阵的互转

reshape

张量 tensor

将三个 2x2的矩阵排列在一起,就可以称之为3x2x2的张量

是神经网络的训练中最为常见的数据形式,维度相同的几个矩阵放在一起

这是2x2x2的张量
[ [ [ 1 , 2 ] , [ 3 , 4 ] ] , [ [ 5 , 6 ] , [ 7 , 8 ] ] ] \begin{bmatrix} [[1,2],\\ [3,4]],\\ [[5,6],\\ [7,8]]\end{bmatrix} [[1,2],[3,4]],[[5,6],[7,8]]
张量的常见操作

转置 x.transpose(1,2)
[ [ [ 1 , 3 ] , [ 2 , 4 ] ] , [ [ 5 , 7 ] , [ 6 , 8 ] ] ] \begin{bmatrix} [[1,3],\\ [2,4]],\\ [[5,7],\\ [6,8]]\end{bmatrix} [[1,3],[2,4]],[[5,7],[6,8]]
在上面的基础上转置 x.transpose(0,1)
[ [ [ 1 , 2 ] , [ 5 , 6 ] ] , [ [ 3 , 4 ] , [ 7 , 8 ] ] ] \begin{bmatrix} [[1,2],\\ [5,6]],\\ [[3,4],\\ [7,8]]\end{bmatrix} [[1,2],[5,6]],[[3,4],[7,8]]

numpy 常用操作

import numpy as np
import torchx = np.array([[1,2,3],[4,5,6]])print(x)
print(x.ndim)#维度  2
print(x.shape)# 获取行列维度  (2, 3)
print(x.size)#一共多少个数字  6
print(x.dtype)#类型   int64
print(np.sum(x))#矩阵内所有元素的和 21
print(np.sum(x,axis=0))#行相加 [5 7 9]
print(np.sum(x,axis=1))#列相加 [ 6 15]
print(np.reshape(x,(3,2)))#变换维度[[1 2]#[3 4]#[5 6]]#[[1.         1.41421356 1.73205081]#[2.         2.23606798 2.44948974]]
print(np.sqrt(x))#每个数字开平方#[[  2.71828183   7.3890561   20.08553692]
# [ 54.59815003 148.4131591  403.42879349]]
print(np.exp(x))#每个数求指数
print(x.transpose())#转置
print(x.flatten())#变成一维向量 [1 2 3 4 5 6]x = torch.FloatTensor(x)
print(x.shape)#torch.Size([2, 3])
#tensor([[  2.7183,   7.3891,  20.0855],# [ 54.5981, 148.4132, 403.4288]])
print(torch.exp(x))
print(torch.sum(x))#tensor(21.)
print(torch.sum(x,dim=0))#tensor([5., 7., 9.])
print(torch.sum(x,dim=1))#tensor([ 6., 15.])
'''
tensor([[1., 4.],[2., 5.],[3., 6.]])
'''
print(x.transpose(1,0))
print(x.flatten())#tensor([1., 2., 3., 4., 5., 6.])

导数, 梯度

表示函数变化的方向
f ′ ( x 0 ) = l i m Δ y Δ x = l i m f ( x 0 + Δ x ) − f ( x 0 ) Δ x f'(x_0) = lim\frac{\Delta y}{\Delta x} = lim \frac{f(x_0 + \Delta x) - f(x_0)}{\Delta x} f(x0)=limΔxΔy=limΔxf(x0+Δx)f(x0)
求导法则

  • 加法
  • 乘法
  • 除法
  • 链式求导

梯度

多元函数的导数

原函数: y = 3 x 1 2 + 4 x 2 2 + 5 x 3 2 y = 3x_1^2 + 4x_2^2 + 5x_3^2 y=3x12+4x22+5x32

导函数: y = 6 x 1 + 8 x 2 + 10 x 3 y = {6x_1 + 8x_2 + 10x_3} y=6x

http://www.dtcms.com/a/295358.html

相关文章:

  • Unity 多人游戏框架学习系列九
  • RocketMQ搭建及测试(Windows环境)
  • 基于深度学习的图像分类:使用MobileNet实现高效分类
  • 路径总和Ⅲ(树)C++
  • 网络编程基石:TCP 原理全解析
  • AbMole小课堂 | Nivolumab(BMS-936558):PD-1人源化单抗的作用机制与抗肿瘤应用
  • 给定一个长度为n的数组,和一个长度为w的滑动窗口,w < n, 窗口沿着数组每次滑动一个位置,求出每次滑动后,滑动窗口内的最大值。 C++实现高效代码
  • 数据库底层索引讲解-排序和数据结构
  • Ethereum: 从零到一为DApp开发搭建专属的私有测试网络
  • Compose 适配 - 键鼠模式
  • Ethereum: 从 1e+21 到千枚以太币:解密 Geth 控制台的余额查询
  • Day30| 452. 用最少数量的箭引爆气球、435. 无重叠区间、763.划分字母区间
  • 风险分级响应管理分析系统
  • 基于 PIC16 系列的多功能电子烟(温控 + 电压控制 + 多模式)方案
  • 亚马逊云科技 EC2 部署 Dify,集成 Amazon Bedrock 构建生成式 AI 应用
  • 【初识数据结构】CS61B 中的归并排序和选择排序
  • python学习xlsx表格导入mysql脚本 + leetcode19删除链表倒N + python与本地mysql连接不上排错
  • 每日算法-两数之和
  • Go基础教程 从零到英雄:30分钟掌握Go语言核心精髓
  • Leetcode—1035. 不相交的线【中等】
  • 独家|百度副总裁尚国斌即将离职,此前统筹百度地图;行业搜索及智能体业务总经理谢天转岗IDG
  • MongoDB 和 Elasticsearch(ES)区别
  • 项目重新发布更新缓存问题,Nginx清除缓存更新网页
  • MAC包头、IP包头 、UDP包头中的长度含义是啥?三者之间有啥区别?
  • Node.js 版本兼容问题:minimatch@10.0.3和minio@7.0.28 冲突的解决
  • Node.js 全局对象
  • Ubuntu-安装Asyn教程
  • 造成服务器内存不足的原因有什么
  • Node.js 中的内置模板path
  • Node.js特训专栏-实战进阶:18.密码加密与安全传输