神经网络入门基础知识

本文涉及的产品
云原生网关 MSE Higress,422元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: 神经网络入门基础知识

文章和代码已经归档至【Github仓库:https://github.com/timerring/dive-into-AI 】或者公众号【AIShareLab】回复 神经网络基础 也可获取。

神经网络入门

  • 神经网络与多层感知机:基础知识,激活函数、反向传播、损失函数、权值初始化和正则化
  • 卷积神经网络:统治图像领域的神经网络结构,发展历史、卷积操作和池化操作
  • 循环神经网络:统治序列数据的神经网络结构,RNN、GRU和LSTM

学习资源推荐

  1. 吴恩达的深度学习课程: https://www.deeplearning.ai
  2. 李宏毅的深度学习课程
  3. 《deeplearning》俗称花书: https://github.com/exacity/deeplearningbook-chinese
  4. 周志华的《机器学习》

人工神经元

Artificial Neural Unit

人工神经元: 人类神经元中抽象出来的数学模型

1904年研究出人类神经元,其中:

  • 树突:类似于input
  • 细胞核:类似于operation :处理操作+激活函数
  • 轴突末梢:类似于output

1943年心理学家W.S. McCulloch和数理逻辑学家W.Pitts研究出人工神经元,称为M-Р模型。

$$ f(\sum_{i=1}^{N} I_{i} \cdot W_{i})=y $$

人工神经网络: 大量神经元以某种连接方式构成的机器学习模型

第一个神经网络:1958年,计算机科学家Rosenblatt提出的Perceptron(感知机)

$$ o=\sigma(\langle\mathbf{w},\mathbf{x}\rangle+b) $$

$$ \sigma(x)=\{\begin{array}{ll} 1 & \text { if } x>0 \\ 0 & \text { otherwise } \end{array} $$

引发了第一波神经网络的热潮,但感知机的致命缺点是:Minsky在1969年证明Perceptron无法解决异或问题。根源在于,二维层面上神经网络是一条直线。无法划分异或的区间。

$$ \begin{array}{rlr} 0 & =\sigma(\mathrm{x}_{0} \mathrm{w}_{0}+\mathrm{x}_{1} \mathrm{w}_{1}+\mathrm{b}) \\ 0 & =\mathrm{x}_{0} \mathrm{w}_{0}+\mathrm{x}_{1} \mathrm{w}_{1}+\mathrm{b} \\ \mathrm{x}_{1} \mathrm{w}_{1} & =0-\mathrm{x}_{0} \mathrm{w}_{0}-\mathrm{b} \\ \mathrm{x}_{1} & = -\frac{\mathrm{w}_{0}}{\mathrm{w}_{1}} \mathrm{x}_{0}-\frac{\mathrm{b}}{\mathrm{w}_{1}} \\ \mathrm{y} & = \mathrm{kx}+\mathrm{b} \end{array} $$

多层感知机

多层感知机(Multi Layer Perceptron,MLP):单层神经网络基础上引入一个或多个隐藏层,使神经网络有多个网络层,因而得名多层感知机。

隐藏层的输入权重矩阵是 $\mathrm{W}_{4 \times 5}$

隐藏层的权重矩阵是 $W_{5 \times 3} $

前向传播:(以下方便起见省略了偏置)

$$ \begin{array}{l} \sigma(\mathrm{X}_{1 \times 4} \cdot \mathrm{W}_{\mathrm{h}})=\mathrm{H}_{1 \times 5} \\ \sigma(\mathrm{H}_{1 \times 5} \cdot \mathrm{W}_{\mathrm{o} \times 3})=\mathrm{O}_{1 \times 3} \end{array} $$

整个过程如果没有激活函数,网络退化为单层网络,下面证明:

$$ \begin{aligned} \boldsymbol{H} & =\boldsymbol{X} \boldsymbol{W}_{\mathrm{h}}+\boldsymbol{b}_{\mathrm{h}} \\ \boldsymbol{O} & =\boldsymbol{H} \boldsymbol{W}_{\mathrm{o}}+\boldsymbol{b}_{\mathrm{o}} \\ \boldsymbol{O} & =(\boldsymbol{X} \boldsymbol{W}_{\mathrm{h}}+\boldsymbol{b}_{\mathrm{h}}) \boldsymbol{W}_{\mathrm{o}}+\boldsymbol{b}_{\mathrm{o}}=\boldsymbol{X} \boldsymbol{W}_{\mathrm{h}} \boldsymbol{W}_{\mathrm{o}}+\boldsymbol{b}_{\mathrm{h}} \boldsymbol{W}_{\mathrm{o}}+\boldsymbol{b}_{\mathrm{c}} \end{aligned} $$

可见,最终网络还是可以化简替代,退化为XW+b的单层网络。

当隐藏层加入激活函数,可避免网络退化

$$ \begin{array}{l} \mathbf{h}=\sigma(\mathbf{W}_{1} \mathbf{x}+\mathbf{b}_{1}) \\ \mathbf{0}=\mathbf{w}_{2}^{\mathrm{T}} \mathbf{h}+\mathbf{b}_{2} \end{array} $$

激活函数

作用:

  1. 让多层感知机成为真正的多层,否则等价于一层;
  2. 引入非线性,使网络可以逼近任意非线性函数(详见:万能逼近定理,universal approximator)

激活函数需要具备以下几点性质:

  1. 连续并可导(允许少数点上不可导),便于利用数值优化的方法来学习网络参数
  2. 激活函数及其导函数要尽可能的简单,有利于提高网络计算效率
  3. 激活函数的导函数的值域要在合适区间内,反向传播中会使用到激活函数的导函数,数值会影响到权重的更新,不能太大也不能太小,否则会影响训练的效率和稳定性。

常见激活函数:Sigmoid(S型) , Tanh(双曲正切), ReLU(修正线性单元)

Sigmoid(S型)

常用于RNN以及二分类中。做二分类的输出的激活函数;做循环神经网络中门控单元的激活函数。

有饱和区,导函数的饱和区(神经元的值差不多,梯度差不多),更新困难。

$$ \begin{array}{c} g(z)=\frac{1}{1+e^{-z}} \\ g^{\prime}(z)=g(z) *(1-g(z)) \end{array} $$

Tanh(双曲正切)

特点,零均值。同样存在饱和区,不利于梯度传播。中间的是线性区

$$ \begin{array}{c} \tanh (x)=\frac{e^{x}-e^{-x}}{e^{x}+e^{-x}} \\ g^{\prime}(z)=1-(g(z))^{2} \end{array} $$

ReLU(修正线性单元)

不存在饱和区,卷积神经网络中经常使用。

$$ \begin{array}{c} \text { Relu }=\max (0, x) \\ g^{\prime}(z)=\{\begin{array}{ll} 1 & \text { if } \mathrm{z}>0 \\ \text { undefined } & \text { if } \mathrm{z}=0 \\ 0 & \text { if } \mathrm{z}<0 \end{array}. \end{array} $$

反向传播(Back Propagation)

前向传播

输入层数据从前向后,数据逐步传递至输出层

$$ \begin{array}{l} \mathrm{z}=\mathrm{x} \cdot \mathrm{W}^{(1)} \\ \mathrm{h}=\phi(\mathrm{z}) \\ \mathrm{O}=\mathrm{h} \cdot \mathrm{W}^{(2)} \end{array} $$

反向传播

损失函数开始从后向前,梯度逐步传递至一层

反向传播作用:用于权重更新,使网络输出更接近标签

损失函数:衡量模型输出与真实标签的差异,$Loss=f(\hat{y}, y)$

反向传播原理:微积分中的链式求导法则

$$ \mathrm{y}=\mathrm{f}(\mathrm{u}), \mathrm{u}=\mathrm{g}(\mathrm{x}) \quad \frac{\partial \mathrm{y}}{\partial \mathrm{x}}=\frac{\partial \mathrm{y}}{\partial \mathrm{u}} \frac{\partial \mathrm{u}}{\partial \mathrm{x}} $$

其中,$\phi(Z)$ 代表激活函数。$L$代表损失函数。

$$ \begin{array}{l} \frac{\partial L}{\partial W^{(2)}}=\operatorname{prod}(\frac{\partial L}{\partial O}, \frac{\partial O}{\partial W^{(2)}})=\frac{\partial L}{\partial O} \cdot h^{\top} \\ \frac{\partial L}{\partial h}=\operatorname{prod}(\frac{\partial L}{\partial O}, \frac{\partial O}{\partial h})=W^{(2)\top} \cdot \frac{\partial L}{\partial O} \\ \frac{\partial L}{\partial z}=\operatorname{prod}(\frac{\partial L}{\partial O}, \frac{\partial O}{\partial h}, \frac{\partial h}{\partial z})=\frac{\partial L}{\partial h} \odot \phi^{\prime}(Z) \\ \frac{\partial L}{\partial W^{(1)}}=\operatorname{prod}(\frac{\partial L}{\partial O}, \frac{\partial O}{\partial h}, \frac{\partial h}{\partial z}, \frac{\partial z}{\partial W^{(1)}})=\frac{\partial L}{\partial z} \cdot X^{\top} \end{array} $$

其中,prod(x,y) 表示x与y根据形状做必要的交换,然后相乘。$\odot$表示逐元素相乘。通过上述式子,可以容易发现,存在链式关系,即后一项的梯度可以用于前一项的梯度上。

从Loss出发有多少条通路,梯度就有多少项,进行相加。上图所示,只有一条通路。用蓝笔画的圆圈,则是两条通路。

梯度下降法(Gradient Decent)

梯度下降法(Gradient Decent):权值沿梯度负方向更新,使函数值减小

导数:函数在指定坐标轴上的变化率

方向导数:指定方向上的变化率(在多维空间)

梯度:一个向量,方向为方向导数取得最大值的方向。

学习率(Learning Rate)

学习率(Learning Rate):控制更新步长

沿梯度负方向更新

$$ \boldsymbol{w}_{\mathrm{i}+1}=\boldsymbol{w}_{\mathrm{i}}-\boldsymbol{g}(\boldsymbol{w}_{\mathrm{i}}) $$

例:

$$ \begin{array}{l} \mathrm{y}=\mathrm{f}(\mathrm{x})=4 * \mathrm{x}^{2} \\ \mathrm{y}^{\prime}=\mathrm{f}^{\prime}(\mathrm{x})=8 * \mathrm{x} \\ \mathrm{x}_{0}=2, \quad \mathrm{y}_{0}=16, \mathrm{f}^{\prime}(\mathrm{x}_{0})=16 \\ \mathrm{x}_{1}=\mathrm{x}_{0}-\mathrm{f}^{\prime}(\mathrm{x}_{0})=2-16=-14 \\ \mathrm{x}_{1}=-14, \quad \mathrm{y}_{1}=784, \mathrm{f}^{\prime}(\mathrm{x}_{1})=-112 \\ \mathrm{x}_{2}=\mathrm{x}_{1}-\mathrm{f}^{\prime}(\mathrm{x}_{1})=-14+112=98, \quad \mathrm{y}_{2}=38416 \\ \end{array} $$

对比:

无学习率:$\boldsymbol{w}_{\mathrm{i}+1}=\boldsymbol{w}_{\mathrm{i}}-\boldsymbol{g}(\boldsymbol{w}_{\mathrm{i}})$

有学习率:$\boldsymbol{w}_{\mathrm{i}+1}=\boldsymbol{w}_{\mathrm{i}}- LR * \boldsymbol{g}(\boldsymbol{w}_{\mathrm{i}})$

不同学习率的影响:分别为1——0.25——0.24——0.1

损失函数(Loss Function)

损失函数:衡量模型输出与真实的标签之间的差距

损失函数(Loss Function)

描述的单样本的差异值

$$ \operatorname{Loss}=\mathrm{f}(\hat{\mathrm{y}}, \mathrm{y}) $$

代价函数 (Cost Function)

描述的是总体样样本\整个数据集的Loss的平均值

$$ cost=\frac{\mathbf{1}}{\mathrm{N}} \sum_{i}^{N} f(y_{i}^{\wedge}, y_{i}) $$

目标函数(Objective Function)

模型输出与标签之间的差异+正则项(控制模型复杂度防止过拟合现象)

$$ Obj= Cost + Regularization Term $$

两种常见损失函数

MSE

MSE (均方误差, Mean Squared Error):输出与标签之差的平方的均值,常在回归任务中使用。计算公式:

$$ \mathrm{MSE}=\frac{\sum_{\mathrm{i}=1}^{\mathrm{n}}(\mathrm{y}_{\mathrm{i}}-\mathrm{y}_{\mathrm{i}}^{\mathrm{p}})^{2}}{\mathrm{n}} $$

公式中p代表predict。

例: label =(1,2) pred =(1.5,1.5)

$$ > \mathrm{MSE}=\frac{[(1-1.5)^{2}+(2-1.5)^{2}]}{2}=0.25 > $$

CE

CE(Cross Entropy,交叉熵) :交叉熵源自信息论,用于衡量两个分布的差异,常在分类任务中使用。计算公式:

$$ \mathrm{H}(\mathrm{p}, \mathrm{q})=-\sum_{\mathrm{i}=1}^{\mathrm{n}} \mathrm{p}(\mathrm{x}_{\mathrm{i}}) \log \mathrm{q}(\mathrm{x}_{\mathrm{i}}) $$

p是指真是分布,q是模型的分布,试图用q去逼近p。分布之间的距离是没有对应关系的。在给定 p 的情况下,如果 q 和 p 越接近,交叉熵越小;如果 q 和 p 越远,交叉熵就越大。

  • 自信息:$I(x)=−logP(x)$ , p(x) 是某事件发生的概率

  • 信息熵:描述信息的不确定度,信息熵越大信息越不确定,信息熵越小

    信息熵 = 所有可能取值的信息量的期望,即

$$ \mathrm{H}(\mathrm{x})=\mathrm{E}_{\mathrm{x}-\mathrm{p}}[\mathrm{I}(\mathrm{x})]=-\mathrm{E}[\log \mathrm{P}(\mathrm{x})]=-\sum_{\mathrm{i}=1}^{\mathrm{N}} \mathrm{p}_{\mathrm{i}} \log (\mathrm{p}_{\mathrm{i}}) $$

  • 相对熵:又称K-L散度衡量两个分布之间的差异。用概率分布 q 来近似 p 时所造成的信息损失量.KL 散度是按照概率分布q的最优编码对真实分布为p的信息进行编码,其平均编码长度(即交叉熵)𝐻(p, q) 和 p 的最优平均编码长度(即熵)𝐻(p) 之间的差异.
    $$ \begin{aligned} \mathrm{D}_{\mathrm{KL}}(\mathrm{P} \| \mathrm{Q})=\mathrm{E}_{\mathrm{x} \sim \mathrm{p}}[\log \frac{\mathrm{P}(\mathrm{x})}{\mathrm{Q}(\mathrm{x})}] & =\mathrm{E}_{\mathrm{x}-\mathrm{p}}[\log \mathrm{P}(\mathrm{x})-\log \mathrm{Q}(\mathrm{x})] \\ & =\sum_{\mathrm{i}=1}^{\mathrm{N}} \mathrm{P}(\mathrm{x}_{\mathrm{i}})(\log \mathrm{P}(\mathrm{x}_{\mathrm{i}})-\log \mathrm{Q}(\mathrm{x}_{\mathrm{i}})) \end{aligned} $$

由上式可知,$\mathrm{H}(\mathrm{p}, \mathrm{q})=\mathrm{H}(\mathrm{P})+\mathrm{D}_{-} \mathrm{KL}(\mathrm{P} \| \mathrm{Q})$ ,即 交叉熵 = 信息熵 + 相对熵

又因为信息熵是一个关于p(真实分布)的常数,因此优化交叉熵等价于优化相对熵

举例:计算损失函数(分类任务)

$$ > \begin{array}{l} > \mathrm{H}(\mathrm{p}, \mathrm{q})=-\sum_{\mathrm{i}=1}^{\mathrm{n}} \mathrm{p}(\mathrm{x}_{\mathrm{i}}) \log \mathrm{q}(\mathrm{x}_{\mathrm{i}})\\ > \operatorname{loss}=-(0^{\star} \log (0.05)+0^{\star} \log (0.1)+1^{\star} \log (0.7)+0^{\star} \log (0.15))=0.36 > \end{array} > $$

这里predict应该是一个概率分布的形式,模型输出如果想化为概率的形式,可以采用softmax函数。

softmax

Softmax函数可以将多个标量映射为一个概率分布。(将数据变换到符合概率分布的形式)

概率有两个性质:

  1. 概率值是非负的
  2. 概率之和等于1

$$ \mathrm{y}_{\mathrm{i}}=\mathrm{S}(\boldsymbol{z})_{\mathrm{i}}=\frac{\mathrm{e}^{\mathrm{z}_{\mathrm{i}}}}{\sum_{\mathrm{j}=1}^{\mathrm{C}} \mathrm{e}^{\mathrm{z}_{\mathrm{j}}}}, \mathrm{i}=1, \ldots, \mathrm{C} $$

概率 Softmax
概率值是非负的 取指数,实现非负
概率之和等于1 除以指数之和,实现之和为1

没有一个适合所有任务的损失函数,损失函数设计会涉及算法类型、求导是否容易、数据中异常值的分布等问题。

更多损失函数可到PyTorch网站:https://pytorch.org/docs/stable/nn.html#loss-functions

函数解读: https://zhuanlan.zhihu.com/p/61379965

权值初始化(Initialization)

权值初始化:训练前对权值参数赋值,良好的权值初始化有利于模型训练

简便但错误的方法:初始化为全0——使网络层退化,多少个神经元都等于一个神经元,没有训练的意义。

随机初始化法

高斯分布随机初始化,从高斯分布中随机采样,对权重进行赋值,比如 N~(0,0.01)

3$\sigma$准则: 数值分布在(μ-3$\sigma$,μ+3$\sigma$)中的概率为99.73%

控制权值的尺度:不能让权值太小,如果权值过小,相当于网络退化。例如如果权值过大,会使得一些值落入sigmoid函数中的饱和区域,饱和区域中的梯度接近于0,使梯度消失,不利于模型的训练。

自适应标准差

自适应方法随机分布中的标准差

  • Xavier初始化:《Understanding the difficulty of training deep feedforward neural networks 》2010
    $$ \mathrm{U}(-\sqrt{\frac{6}{a+b}}, \sqrt{\frac{6}{a+b}}) $$
    a是输入神经元的个数,b是输出神经元的个数。假设$-\sqrt\frac{6}{a+b}$为A,$\sqrt\frac{6}{a+b}$为B,则可知$\frac{A+B}{2}=mean=0$,$std=\sqrt\frac{(B-A)^2}{12}$。

  • Kaiming初始化/MSRA:《Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification》2015

正则化(Regularization)

Regularization:减小方差的策略,通俗理解为减轻过拟合的策略

误差可分解为:偏差,方差与噪声之和。即误差 = 偏差 + 方差 + 噪声之和(西瓜书)

  • 偏差度量了学习算法的期望预测与真实结果的偏离程度,即刻画了学习算法本身的拟合能力
  • 方差度量了同样大小的训练集的变动所导致的学习性能的变化,即刻画了数据扰动所造成的影响
  • 噪声则表达了在当前任务上任何学习算法所能达到的期望泛化误差的下界

过拟合现象:方差过大;在训练集表现良好,在测试集表现糟糕。

损失函数(Loss Function):描述的单样本的差异值

$$ \text { Loss }=\mathrm{f}(\hat{\mathrm{y}}, \mathrm{y}) $$

代价函数 (Cost Function):描述的是总体样样本\整个数据集的Loss的平均值

$$ \text { Cost }=\frac{1}{N} \sum_{i}^{N} \mathrm{f}({\hat{y_{i}}}, \mathrm{y}_{\mathrm{i}}) $$

目标函数(Objective Function):模型输出与标签之间的差异+正则项(约束)控制模型复杂度防止过拟合现象。

$Obj= Cost + Regularization Term$

L1 Regularization Term: $\sum_{\mathrm{i}}^{\mathrm{N}}|\mathrm{w}_{\mathrm{i}}|$

L2 Regularization Term: $\sum_{\mathrm{i}}^{\mathrm{N}} \mathrm{w}_{\mathrm{i}}^{2} $

两个权值w1和w2组成的权值等高线,在所有等高线中选择L2正则化最小的(即圆与椭圆相切),L1正则化最小的(即方框与椭圆相切)。

参考深度学习花书 第七章

L2 Regularization

weight decay (权值衰减)L2正则化含有权值衰减的作用。

目标函数(Objective Function):

$$ \begin{array}{l} \boldsymbol{O} \boldsymbol{b} \boldsymbol{j}=\text { textCost }+ \text { Regularization Term } \\ \boldsymbol{O} \boldsymbol{b} \boldsymbol{j}=\boldsymbol{L} \boldsymbol{o s s}+\frac{\lambda}{2} * \sum_{\mathrm{i}}^{\mathrm{N}} \boldsymbol{w}_{\mathrm{i}}^{2} \end{array} $$

无正则项:

$$ \mathrm{w}_{\mathrm{i}+1}=\mathrm{w}_{\mathrm{i}}-\frac{\partial \mathrm{obj}}{\partial \mathrm{w}_{\mathrm{i}}}=\mathrm{w}_{\mathrm{i}}-\frac{\partial \text { Loss }}{\partial \mathrm{w}_{\mathrm{i}}} $$

有正则项:

$$ \begin{aligned} \mathrm{w}_{\mathrm{i}+1}=\mathrm{w}_{\mathrm{i}}-\frac{\partial \mathrm{obj}}{\partial \mathrm{w}_{\mathrm{i}}}=\mathrm{w}_{\mathrm{i}} & -(\frac{\partial \mathrm{Loss}}{\partial \mathrm{w}_{\mathrm{i}}}+\lambda^{*} \mathrm{w}_{\mathrm{i}}) \\ & =\mathrm{w}_{\mathrm{i}}(1-\lambda)-\frac{\partial \mathrm{Loss}}{\partial \mathrm{w}_{\mathrm{i}}} \end{aligned} $$

这里$\lambda$相当于一个系数, $0<\lambda<1$,看更关注Loss还是更关注正则项的一个调节系数。通过有无正则项的对比,可以看出L2正则化确实起到了衰减权值的作用。

Dropout

Dropout:随机失活

优点:避免过度依赖某个神经元,实现减轻过拟合

随机:dropout probability (eg:p=0.5)

失活:weight = 0

注意事项:训练和测试两个阶段的数据尺度变化,例如测试的时候会使用去全部的神经元,而在训练的时候会dropout一部分神经元。

测试时,神经元输出值需要乘以P(概率:一定概率丢失神经元)

例如:

测试时数据规模是100:$\sum_{i=1}^{100} W_{i} \cdot x_{i}=100 \times P_{p}=50$ 这时需要乘一个随即失活的概率$P_{p}$,使数据规模与训练时一致。

训练时数据规模是50:$\sum_{i=1}^{50} W_{i} \cdot x_{i}=100 \times 0.5=50$ 这里有50%概率$P_{p}$ dropout每个神经元。

其他正则化方法:BN, LN, IN, GN.

  • Batch normalization: 《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》
  • Layer Normalization: 《Layer Normalization》
  • Instance Normalization: 《Instance Normalization: The Missing Ingredient for Fast Stylization》
  • Group Normalization:《Group Normalization》
相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
目录
相关文章
|
1天前
|
JSON Dart 前端开发
鸿蒙应用开发从入门到入行 - 篇7:http网络请求
在本篇文章里,您将掌握鸿蒙开发工具DevEco的基本使用、ArkUI里的基础组件,并通过制作一个简单界面掌握使用
19 8
|
23天前
|
机器学习/深度学习 资源调度 算法
图卷积网络入门:数学基础与架构设计
本文系统地阐述了图卷积网络的架构原理。通过简化数学表述并聚焦于矩阵运算的核心概念,详细解析了GCN的工作机制。
60 3
图卷积网络入门:数学基础与架构设计
|
13天前
|
Web App开发 网络协议 安全
网络编程懒人入门(十六):手把手教你使用网络编程抓包神器Wireshark
Wireshark是一款开源和跨平台的抓包工具。它通过调用操作系统底层的API,直接捕获网卡上的数据包,因此捕获的数据包详细、功能强大。但Wireshark本身稍显复杂,本文将以用抓包实例,手把手带你一步步用好Wireshark,并真正理解抓到的数据包的各项含义。
60 2
|
20天前
|
机器学习/深度学习 人工智能 算法
深度学习入门:用Python构建你的第一个神经网络
在人工智能的海洋中,深度学习是那艘能够带你远航的船。本文将作为你的航标,引导你搭建第一个神经网络模型,让你领略深度学习的魅力。通过简单直观的语言和实例,我们将一起探索隐藏在数据背后的模式,体验从零开始创造智能系统的快感。准备好了吗?让我们启航吧!
45 3
|
27天前
|
数据采集 XML 存储
构建高效的Python网络爬虫:从入门到实践
本文旨在通过深入浅出的方式,引导读者从零开始构建一个高效的Python网络爬虫。我们将探索爬虫的基本原理、核心组件以及如何利用Python的强大库进行数据抓取和处理。文章不仅提供理论指导,还结合实战案例,让读者能够快速掌握爬虫技术,并应用于实际项目中。无论你是编程新手还是有一定基础的开发者,都能在这篇文章中找到有价值的内容。
|
1月前
|
机器学习/深度学习 人工智能 算法框架/工具
深度学习中的卷积神经网络(CNN)入门
【10月更文挑战第41天】在人工智能的璀璨星空下,卷积神经网络(CNN)如一颗耀眼的新星,照亮了图像处理和视觉识别的路径。本文将深入浅出地介绍CNN的基本概念、核心结构和工作原理,同时提供代码示例,带领初学者轻松步入这一神秘而又充满无限可能的领域。
|
1月前
|
消息中间件 编解码 网络协议
Netty从入门到精通:高性能网络编程的进阶之路
【11月更文挑战第17天】Netty是一个基于Java NIO(Non-blocking I/O)的高性能、异步事件驱动的网络应用框架。使用Netty,开发者可以快速、高效地开发可扩展的网络服务器和客户端程序。本文将带您从Netty的背景、业务场景、功能点、解决问题的关键、底层原理实现,到编写一个详细的Java示例,全面了解Netty,帮助您从入门到精通。
138 0
|
1月前
|
机器学习/深度学习 自然语言处理 前端开发
前端神经网络入门:Brain.js - 详细介绍和对比不同的实现 - CNN、RNN、DNN、FFNN -无需准备环境打开浏览器即可测试运行-支持WebGPU加速
本文介绍了如何使用 JavaScript 神经网络库 **Brain.js** 实现不同类型的神经网络,包括前馈神经网络(FFNN)、深度神经网络(DNN)和循环神经网络(RNN)。通过简单的示例和代码,帮助前端开发者快速入门并理解神经网络的基本概念。文章还对比了各类神经网络的特点和适用场景,并简要介绍了卷积神经网络(CNN)的替代方案。
125 1
|
2月前
|
弹性计算 人工智能 运维
Terraform从入门到实践:快速构建你的第一张业务网络(上)
本次分享主题为《Terraform从入门到实践:快速构建你的第一张业务网络》。首先介绍如何入门和实践Terraform,随后演示如何使用Terraform快速构建业务网络。内容涵盖云上运维挑战及IaC解决方案,并重磅发布Terraform Explorer产品,旨在降低使用门槛并提升用户体验。此外,还将分享Terraform在实际生产中的最佳实践,帮助解决云上运维难题。
163 1
Terraform从入门到实践:快速构建你的第一张业务网络(上)
|
2月前
|
Java
[Java]Socket套接字(网络编程入门)
本文介绍了基于Java Socket实现的一对一和多对多聊天模式。一对一模式通过Server和Client类实现简单的消息收发;多对多模式则通过Server类维护客户端集合,并使用多线程实现实时消息广播。文章旨在帮助读者理解Socket的基本原理和应用。
33 1