MachineLearning入门---第2章---神经网络的数学基础

指导教程: https://github.com/lyhue1991/eat_tensorflow2_in_30_days
学习书籍: <python深度学习>
该书电⼦版下载链接:https://pan.baidu.com/s/1-4q6VjLTb3ZxcefyNCbjSA 提取码:wtzo

神经网络的数学基础
神经网络的核心组件是层(layer),它是一种数据处理模块,可以看作是数据过滤器,进去一些数据,出来的数据变得更加有用。

大多数深度学习都是将简单的层链接起来,从而实现渐进式的数据蒸馏(data distillation)。

训练中的两个重要指标: loss(损失) 和 acc(精度)

神经网络的数据表示 – 张量(tensor)

   tensor(张量)是数据容器,张量的维度,通常叫轴(axis)
        仅包含一个数字的张量叫作标量(scalar,也叫标量张量、零维张量、0D 张量)。
        一维数组叫做向量,一维张量(1D 张量),一维张量只有一个轴。
        二维数组[[2,3,4],[2,3,4]]  矩阵 也叫二维张量,2D张量
        将多个矩阵组合起来得到一个新的数组,可以得到一个3D张量
        将多个3D张量组合成一个数组,可以创建一个4D张量,以此类推。
     张量的关键属性:
          阶(ndim): 也就是 轴的个数 3D 张量有 3 个轴,矩阵有 2 个轴,数组一个轴,也叫张量ndim
          形状(shap): 这是一个整数元组,表示张量沿每个轴的维度大小(元素个数)
                一个矩阵的形状表示(3, 5),则表示第一个轴有3个数据,第二个轴5个数据
                向量的形状只包含一个元素,比如 (5,),而标量的形状为空,即 ()。
          数据类型(dtyoe): 这是张量中所包含数据的类型,
                例如,张量的类型可以是 float32、uint8、float64 等。
                在极少数情况下,你可能会遇到字符(char)张量
           例如:
           张量 train_images 的轴的个数
            print(train_images.ndim)
            > 3
           张量train_images的形状
           print(train_images.shape)
           > (60000, 28, 28)
           数据类型
           print(train_images.dtype)
           > uint8
           所以,这里 train_images 是一个由8位整数组成的 3D 张量
           更确切地说,它是 60000个矩阵组成的数组,
           每个矩阵由 28×28 个整数组成。每个这样的矩阵都是一张灰度图像,
           元素取值范围为 0 - 255

数据批量的概念:
深度学习中所有数据张量的第一个轴(0 轴,因为索引从 0 开始)
都是样本轴(samples axis,有时也叫样本维度)
深度学习模型不会同时处理整个数据集,而是将数据拆分成小批量
对于这种批量张量,第一个轴(0 轴)叫作批量轴(batch axis)或批量维度(batch dimension)。

实际常用的张量:
向量数据(2D张量): 其中第一个轴是样本轴,第二个轴是特征轴。
时间序列数据或序列数据(3D张量): 当时间(或序列顺序)对于数据很重要时,应该将数据存储在带有时间轴的 3D 张量中。
图像数据(4D张量): 图像通常具有三个维度:高度、宽度和颜色深度。
但按照惯例,图像张量始终都是4D张量,灰度图像的彩色通道只有一维。
视频数据(5D张量): 视频可以看作一系列帧,每一帧都是一张彩色图像。

张量运算的一些相关概念:


        逐元素运算: relu 运算和加法都是逐元素(element-wise)的运算,即该运算独立地应用于张量中的每个元素
      
        广播: 如果一个2D张量于一个向量相加,则较小的张量会被广播,以匹配较大张量的形状
                广播的步骤: (1)向较小的张量添加轴(广播轴),使其ndim与较打张量相同
                (2)将较小的张量沿着新轴重复,使其形状与较大的张量相同。

        点积运算: 是最常见也最有用的张量运算。与逐元素的运算不同,它将输入张量的元素合并在一起。
                在 Numpy 和 Keras 中,都是用标准的 dot 运算符来实现点积。
                两个向量之间的点积是一个标量,而且只有元素个数相同的向量之间才能做点积

        张量变形: 张量变形是指改变张量的行和列,以得到想要的形状。
                    变形后的张量的元素总个数与初始张量相同。

         权重(可训参数):  一个简单的神经网络示例:output = relu(dot(W, input) + b
                        其中W和b都是张量,均为该层属性,他们被称为权重,或者叫可训参数,分别对应 kernel 和 bias 属性
                        一开始,这些权重矩阵取较小的随机值,这一步叫作随机初始化,
                        然后根据反馈信号逐渐调节这些权重。这个逐渐调节的过程叫作训练,也就是机器学习中的学习
                         训练发生在训练循环中,其步骤如下
                             (1) 抽取训练样本 x 和对应目标 y 组成的数据批量。
                             (2) 在 x 上运行网络[这一步叫作前向传播(forward pass)],得到预测值 y_pred。
                             (3) 计算网络在这批数据上的损失,用于衡量 y_pred 和 y 之间的距离。
                             (4) 更新网络的所有权重,使网络在这批数据上的损失略微下降。

神经网络主要有以下四个方面
(1)层,多个层组合成网络(或模型)。
(2)输入数据和相应的目标。
(3)损失函数,即用于学习的反馈信号。
(4)优化器,决定学习过程如何进行

层:
概念: 神经网络的基本数据结构是层,
层是一个数据处理模块,将一个或多个输入张量转换为一个或多个输出张量。
有些层是无状态的,但大多数的层是有状态的,即层的权重。
权重是利用随机梯度下降学到的一个或多个张量,其中包含网络的知识。

   不同的张量格式与不同的数据处理类型需要用到不同的层。
   例如,简单的向量数据保存在形状为 (samples, features) 的 2D 张量中,
   通常用密集连接层[densely connected layer,
   也叫全连接层(fully connected layer)或密集层(dense layer),
   对应于 Keras 的 Dense 类]来处理。
   序列数据保存在形状为 (samples, timesteps, features) 的 3D 张量中,
   通常用循环层(recurrent layer,比如 Keras 的 LSTM 层)来处理。
   图像数据保存在 4D 张量中,通常用二维卷积层(Keras 的 Conv2D)来处理。

模型:层构成的网络
深度学习模型是层构成的有向无环图。最常见的例子就是层的线性堆叠(网络拓扑结构),将单一输入映射为单一输出。
一些常见的网络拓扑结构如下。
双分支(two-branch)网络
多头(multihead)网络
Inception 模块

损失函数与优化器:
一旦确定了网络架构,你还需要选择以下两个参数。
损失函数(目标函数)——在训练过程中需要将其最小化。它能够衡量当前任务是否已成功完成。
优化器——决定如何基于损失函数对网络进行更新。它执行的是随机梯度下降(SGD)的某个变体。

猜你喜欢

转载自blog.csdn.net/xy3233/article/details/121679472