在深入探讨深度学习之前,首先需要了解神经网络的基础知识。神经网络是模仿人脑处理数据的方式构建的,它们是深度学习的核心。本文将从零开始,带了解神经网络的构建和使用PyTorch实现的过程。
生物神经网络是构建人工神经网络的主要灵感来源,目的是让机器能够执行复杂任务并像人类一样思考。神经元是神经网络的主要单元,包括细胞体(soma)、树突和轴突。这些连接通过纤维和树突以复杂的方式在多个方向上分支并连接在一起,接收来自附近神经元的信号,并通过轴突将信号传递给其他神经元。神经元之间的接触点称为突触。就像多米诺骨牌效应一样,冲动从一个神经元传递到另一个神经元。
人工神经网络是基于模仿人脑工作原理构建的。可以将其视为一个数学建模的简化版人脑。与BNN类似,ANN具有不同的特征,这些特征以特定的权重输入神经元,并以神经元的输出形式发射。这些特征是输入到神经元的,类似于BNN中的树突。这些节点类似于细胞核,权重由突触表示,轴突用于输出。人工神经网络由输入层、隐藏层和输出层组成。输入层接受所有提供给它的输入,这些可能是用于分类最喜欢的宝可梦的属性特征,或者是用于识别图像是猫还是狗的图像。隐藏层位于输入和输出之间,用于发现与问题相关的模式。这是通过更新其权重来学习的层。输出层可以是一个神经元,如预测句子中的下一个词的情况,两个神经元用于获取图像是猫还是狗的概率,或者使用softmax进行分类的多个神经元,如CIFAR-10。
人工神经网络基本上接受输入并计算这些输入的加权和。此外,还会添加一个偏置项。这个加权和偏置项被传递到激活函数,如sigmoid、ReLU、tanH等。一个神经元的输出作为输入传递到神经网络的下一层。当神经网络有多个隐藏层时,它被称为深度神经网络。可以通过增加网络中的隐藏层来深入。但需要注意的是,过深的网络也不好,因为网络可能会遭受退化问题。有许多方法可以在不遭受这个问题的情况下构建深度网络,例如使用残差块。如果想了解更多,可以参考。
import os
import torch
from torch import nn
from torch.utils.data import DataLoader
from torchvision import datasets, transforms
device = 'cuda' if torch.cuda.is_available() else 'cpu'
print('Using {} device'.format(device))
class NeuralNetwork(nn.Module):
def __init__(self):
super(NeuralNetwork, self).__init__()
self.flatten = nn.Flatten()
self.linear_relu_stack = nn.Sequential(
nn.Linear(28*28, 512),
nn.ReLU(),
nn.Linear(512, 512),
nn.ReLU(),
nn.Linear(512, 10),
nn.ReLU()
)
def forward(self, x):
x = self.flatten(x)
logits = self.linear_relu_stack(x)
return logits
model = NeuralNetwork().to(device)
print(model)