神经网络与深度学习 课程复习总结

神经网络的发展历史

第一代神经网络(1958~1969)

  • MCP模型(1943年):麦卡洛克和皮茨提出了第一个人工神经元模型,简化为输入信号线性加权、求和、非线性激活(阈值法)。
  • 感知器(1958年):罗森布拉特发明了感知器,这是第一种用于模式识别的人工神经网络。
  • 异或问题(1969年):马文·明斯基指出感知器无法解决非线性可分问题,如异或问题,这导致了神经网络研究的第一次低潮。

第二代神经网络(1986~1998)

  • BP算法(1986年):Hinton发明了反向传播算法(Backpropagation),适用于多层感知器(MLP),有效解决了非线性分类和学习问题。
  • 万能逼近定理(1989年):Robert Hecht-Nielsen证明了MLP可以以任意精度逼近任何连续函数。
  • 卷积神经网络(1989年):LeCun发明了LeNet,用于数字识别,取得了较好的成绩,但未引起足够关注。
  • 硬件限制:由于计算机硬件水平有限,神经网络规模增大时会出现“梯度消失”问题,限制了BP算法的发展。
  • 浅层机器学习的兴起:90年代中期,以支持向量机(SVM)为代表的浅层机器学习算法取得了很好的效果,人工神经网络的发展再次进入瓶颈期。

第三代神经网络(2006年至今)

  • 深度学习的突破(2006年):机器学习领域取得突破性进展,深度学习算法被提出,用于处理抽象概念。
    • 深度信念网络:Hinton提出了一种快速学习算法,用于深度信念网络。
    • 降维方法:Hinton等人提出了用神经网络进行数据降维的方法。
  • 标志性成果
    • AlphaGo(2016年):DeepMind的AlphaGo击败围棋九段李世石。
    • AlphaGo Zero(2017年):不需要任何数据,自学围棋规则,短时间内击败AlphaGo。
    • AlphaFold(2020年):DeepMind的AI系统成功预测蛋白质三维结构,达到与实验技术相当的准确性。
    • ChatGPT(2022年):OpenAI发布的大型语言模型,能够生成自然语言处理任务的回答。

神经网络的发展经历了从简单的线性模型到复杂的多层网络的演变,不断克服技术和硬件限制,实现了从理论研究到实际应用的飞跃。

机器学习三要素总结

1. 模型(Model)

模型是用来表示数据规律的数学结构或算法。选择合适的模型是机器学习的第一步。

  • 线性模型:如线性回归,其中模型的输出是输入特征的线性组合。
  • 广义线性模型:如果特征函数是可学习的非线性基函数,模型可以扩展为神经网络。

2. 学习准则(Learning Criterion)

学习准则是评估模型好坏的标准,通常通过损失函数来定义。

  • 损失函数:如平方损失函数和0-1损失函数。损失函数衡量预测结果与真实值之间的差距。
  • 经验风险最小化:在训练数据上最小化损失函数以近似期望风险。
  • 结构风险最小化:通过引入正则化项来防止过拟合。

3. 优化方法(Optimization Method)

优化方法是通过调整模型参数以最小化损失函数的方法。

  • 梯度下降法:包括批量梯度下降法和随机梯度下降法,用于迭代地调整参数以减少损失。
  • 正则化技术:如L1和L2正则化,通过增加约束条件来降低模型复杂度,防止过拟合。

过拟合与泛化能力

  • 过拟合:模型在训练数据上表现良好但在测试数据上表现不佳。
  • 泛化错误:模型在未见数据上的预测误差,期望风险与经验风险之间的差异。
  • 正则化方法:包括权重衰减、数据增强、提前停止等,通过干扰优化过程来减少泛化错误。

机器学习中的几个关键概念

  • 概率:涉及概率分布、随机变量、条件概率等基本概念。
  • 最大似然估计与最大后验估计:用于参数估计的方法,分别基于数据的似然函数和先验概率。

总结来说,机器学习的核心是通过构建合适的模型、定义合理的学习准则,并通过优化方法来调整模型参数,使得模型在新数据上的预测尽可能准确。正则化和优化技术在提高模型的泛化能力上起着关键作用。

神经网络结构、通用近似定理和反向传播算法总结

神经网络结构

  1. 1、基本组成

    • 神经元:神经网络的基本单位,通过激活函数将输入映射到输出。
    • 层级结构:包括输入层、隐藏层和输出层。每层由若干神经元组成。
  2. 2、前馈神经网络

    • 全连接网络:相邻层之间的神经元全部连接,层内无连接。
    • 无反馈结构:信号仅从输入层单向传递到输出层,可用有向无环图表示。
  3. 3、激活函数

    • 非线性映射:常用激活函数包括ReLU、Tanh、Sigmoid等,具有不同的性质和适用场景。
    • 导数性质:激活函数的导数在训练过程中起关键作用,影响梯度计算和参数更新。

通用近似定理

  1. 1、定义

    • 函数逼近能力:前馈神经网络具有逼近任何从实数空间中定义的有界闭集到实数空间的连续函数的能力,只要隐藏层的神经元数量足够多。
  2. 2、条件

    • 线性输出层:网络的输出层需要是线性的。
    • 非线性激活函数:隐藏层需要使用具有“挤压”性质的激活函数,如Sigmoid或Tanh。
  3. 3、意义

    • 广泛应用:该定理保证了前馈神经网络在理论上可以处理各种复杂的函数映射任务,为其在机器学习中的广泛应用提供了理论基础。

反向传播算法

  1. 1、目的

    • 参数更新:通过计算损失函数对网络各参数的梯度,实现网络参数的优化和学习。
  2. 2、步骤

    • 前向传播:计算每一层的输出,直到输出层,得到预测结果。
    • 计算损失:根据预测结果和实际值计算损失函数。
    • 反向传播:从输出层开始,逐层计算损失函数对每个参数的偏导数,使用链式法则。
    • 梯度更新:利用梯度下降法,根据计算得到的梯度更新网络参数。
  3. 3、计算图与自动微分

    • 计算图:将前向计算过程表示为有向图,每个节点代表一个操作或变量。
    • 自动微分:通过计算图自动计算梯度,分为前向模式和反向模式。反向模式(即反向传播)用于高效计算复杂函数的梯度。

总结

  • 神经网络结构决定了信息如何在网络中流动和处理,前馈神经网络结构简单且功能强大。
  • 通用近似定理保证了前馈神经网络的函数逼近能力,为其广泛应用提供了理论支持。
  • 反向传播算法是神经网络训练的核心方法,通过梯度计算和参数更新实现网络的学习和优化。

卷积神经网络中的反向传播算法

概述

卷积神经网络(CNN)通过卷积层、池化层和全连接层的堆叠来处理图像数据。在训练CNN时,反向传播算法(Backpropagation)是关键的优化方法,用于调整网络的权重以最小化损失函数。

反向传播的步骤

反向传播算法可以分为以下几个主要步骤:

  1. 前向传播(Forward Pass)

    • 输入数据通过网络各层进行前向计算,直到产生最终输出。
    • 记录每一层的输入、输出和中间结果(如激活值),以备后续计算梯度使用。
  2. 计算损失(Loss Calculation)

    • 使用输出结果与实际标签计算损失值。常用的损失函数包括均方误差(MSE)和交叉熵损失(Cross-Entropy Loss)。
  3. 反向传播(Backward Pass)

    • 输出层反向传播:计算损失函数关于输出层每个神经元输入的偏导数。
    • 隐藏层反向传播:逐层向前计算每层的梯度。利用链式法则,将后层的梯度传播到前层。
  4. 参数更新(Parameter Update)

    • 使用梯度下降法(如随机梯度下降SGD,Adam等),调整每层的权重和偏置。更新公式为:
      θ = θ − η ⋅ ∇ θ L \theta = \theta - \eta \cdot \nabla_{\theta} L θ=θηθL
      其中, θ \theta θ 表示权重参数, η \eta η 为学习率, ∇ θ L \nabla_{\theta} L θL 为损失函数相对于参数的梯度。

卷积层的反向传播

在卷积层中,反向传播的具体过程与全连接层有所不同,主要包括以下几个部分:

  1. 卷积核梯度计算

    • 计算损失函数关于卷积核的梯度。对于每个卷积核,梯度通过卷积操作的反向传播计算得出。
  2. 输入梯度计算

    • 计算损失函数关于输入数据的梯度。这一步同样通过卷积操作的反向传播实现。
  3. 参数梯度累积

    • 对于每个卷积核,累积梯度并更新参数。

数学表达

对于卷积层的梯度计算,假设输入为(X),卷积核为(W),输出为(Y),损失函数为(L),则梯度计算公式如下:

  • 损失函数关于卷积核的梯度
    ∂ L ∂ W = X ∗ δ \frac{\partial L}{\partial W} = X \ast \delta WL=Xδ

  • 其中,(\ast) 表示卷积操作,(\delta) 为损失函数关于输出的梯度。

  • 损失函数关于输入的梯度
    ∂ L ∂ X = W ∗ δ \frac{\partial L}{\partial X} = W \ast \delta XL=Wδ

残差网络(Residual Network)

残差网络(ResNet)是解决深层神经网络训练难题的重要创新之一。通过引入残差块(Residual Block),ResNet有效地缓解了深度增加导致的梯度消失和梯度爆炸问题。

核心思想

ResNet的核心思想是引入残差连接(skip connections),即在某一层的输出直接传递到后面几层,用于构造残差块。具体地,残差块的输出不仅依赖于该块的输入经过若干层的变换,还包括一个恒等映射(identity mapping)。

残差块

一个典型的残差块由两个卷积层组成,并添加了输入的恒等映射,如下所示:
y = F ( x , { W i } ) + x \ y = \mathcal{F}(x, \{W_i\}) + x  y=F(x,{Wi})+x
其中,$\mathcal{F}(x, {W_i}) $ 表示卷积层的变换,( x ) 为输入,( y ) 为输出。这样,通过恒等映射,残差块的输入直接加到输出上,有助于梯度更好地反向传播。

网络结构

ResNet由多个残差块堆叠而成,可以构建非常深的网络结构,如ResNet-50、ResNet-101和ResNet-152等。每个残差块的基本结构如下:

  1. 卷积层:带有Batch Normalization和ReLU激活函数。
  2. 恒等映射:直接将输入传递到后续层。
训练优势

残差网络通过恒等映射有效地解决了深层网络的梯度消失问题,使得非常深的网络能够顺利训练。这一改进使得ResNet在各种图像识别任务中取得了显著的性能提升。

实践应用
  • 图像识别:ResNet在ImageNet比赛中取得了优异的成绩,大幅度提升了图像分类的准确率。
  • 迁移学习:由于其强大的特征提取能力,ResNet被广泛用于迁移学习任务中,作为预训练模型的基础网络。
  • 其他领域:包括目标检测、图像分割和自然语言处理等领域,ResNet的残差连接思想被广泛应用。

总结

残差网络通过引入残差连接,有效解决了深层神经网络的训练难题,使得构建和训练非常深的网络成为可能。这一创新在计算机视觉和其他领域带来了巨大的性能提升和广泛的应用。

自注意力机制

定义与特点

  • 自注意力(Self-Attention):通过对输入序列中的每一个元素进行加权计算,捕捉序列中不同位置间的依赖关系。其主要优势在于能够并行计算并捕捉长距离依赖。
  • QKV模式:自注意力机制通常采用Query、Key、Value三元组(QKV模式),通过这些向量计算注意力权重,生成新的表示向量。

计算过程

  • 对于输入序列 (X = [x_1, …, x_N] \in \mathbb{R}^{D \times N}),首先生成三个向量序列(Query、Key、Value)。
  • 利用缩放点积作为注意力打分函数,输出向量序列可以简写为一种形式,即多头自注意力模型,通过多个注意力头并行计算,提高模型的表达能力。

应用领域

  • 自注意力机制被广泛应用于自然语言处理(NLP)、语音识别、图像处理等领域。例如,BERT和Transformer模型都采用了自注意力机制。

Transformer

架构概述

  • Encoder-Decoder结构:Transformer模型包含编码器(Encoder)和解码器(Decoder)两部分。编码器将输入序列转换为隐藏表示,解码器则将隐藏表示转换为输出序列。
  • 多头自注意力:Transformer中的核心组件,多头自注意力机制允许模型在不同的表示子空间中并行地关注不同位置的信息。

位置编码

  • 由于自注意力机制本身不包含位置信息,Transformer通过位置编码(Positional Encoding)为每个位置添加唯一的向量,使模型能够捕捉序列中的位置信息。

优势

  • 并行计算:与RNN不同,Transformer可以并行处理整个序列,从而提高计算效率。
  • 处理长距离依赖:自注意力机制使得Transformer能够有效处理序列中的长距离依赖关系。

应用场景

  • 机器翻译:通过序列到序列(seq2seq)学习,Transformer在输入序列和输出序列之间建立映射关系,是机器翻译任务中的一种有效模型。
  • 语音翻译和语音识别:Transformer模型也被应用于语音处理任务,通过自注意力机制处理长时间的语音序列。

综上,自注意力机制和Transformer模型通过并行计算和有效处理长距离依赖,广泛应用于各种序列建模任务,如自然语言处理、语音识别和机器翻译等领域。这些技术的核心在于自注意力机制的高效计算和Transformer架构的灵活应用。

改进自编码模型的思想

自编码模型主要是通过学习数据的有效表示来进行重构,常见的改进自编码模型的思想包括稀疏自编码器和降噪自编码器。

稀疏自编码器

  • 概念:通过给自编码器的隐藏层单元增加稀疏性限制,促使自编码器学习数据中一些有用的结构。
  • 优点:稀疏自编码器具有高可解释性,并能隐式地进行特征选择。这意味着它能选择与输入样本相关的最少特征,从而更好地表示输入样本,降低噪声并减轻过拟合。

降噪自编码器

  • 概念:通过向输入向量加入噪声,使自编码器在重构时必须学习到数据的本质特征,从而增加编码的鲁棒性。具体方法是将输入向量的一些维度值随机设置为0,得到一个被损坏的向量,然后将其输入自编码器进行重构。
  • 目的:这种方法的核心在于通过引入噪声来提升模型对数据本质特征的提取能力,使得模型对原始无损数据的重构能力更强。

模型独立学习的思想

模型独立学习方法不依赖于特定的模型架构,而是通过各种学习策略来提升模型的性能,主要包括集成学习、元学习等。

集成学习

  • 概念:集成学习通过组合多个基模型来提升整体模型的性能。常见的方法包括Bagging和Boosting
  • 具体方法
    • 随机森林:通过构建多个决策树并对其结果进行平均或投票,从而提升模型的泛化能力。随机森林中的每个基模型都是一棵决策树,每棵树通过随机选择特征和样本来训练,以增加基模型之间的独立性
    • AdaBoost:一种Boosting算法,通过迭代训练多个弱分类器,每次训练时增加前序分类器分错样本的权重,从而使后续分类器更关注难分类的样本,最终提升整体模型的准确率

元学习

  • 概念:元学习(Meta-learning)旨在使模型具备快速学习新任务的能力。与传统的机器学习需要大量数据从头开始训练不同,元学习通过先训练超参数,再进行具体任务的微调,使模型能够高效地学习新任务
  • 方法:在元学习中,训练单位是任务而非样本数据。通过多个训练任务来学习较好的超参数,然后在特定任务上进行测试,以提升模型的学习能力

迁移学习

  • 概念:迁移学习通过在大规模数据上训练模型,然后在具体任务中进行微调,来提升模型的性能。根据特征空间和标签空间的不同,迁移学习可以分为异构迁移学习和同构迁移学习

总结,改进自编码模型的核心在于通过稀疏性和噪声引入来提升模型的特征提取和重构能力;而模型独立的学习思想则通过集成学习、元学习和迁移学习等方法,不依赖于特定的模型架构,来提高模型的泛化能力和学习效率。

概率图模型

概率图模型(Probabilistic Graphical Models)是利用图结构表示随机变量及其条件依赖关系的概率模型。它们结合了图论和概率论,广泛应用于机器学习和统计学中。本文档主要讨论深度生成模型及其相关概念。

深度生成模型

深度生成模型是利用神经网络构建生成模型的框架,包括变分自编码器(Variational Autoencoder, VAE)和生成对抗网络(Generative Adversarial Network, GAN);。

变分自编码器(VAE)
  • 基本原理:VAE通过学习数据的潜在表示,生成具有相似特征的新数据样本。其训练过程包括以下步骤:

    1. 将数据输入推断网络(编码器),得到潜在表示。
    2. 从潜在表示中采样,得到随机噪声。
    3. 将随机噪声输入生成网络(解码器),生成重建数据。
    4. 计算重建损失和KL散度,并将两者相加作为总损失。
    5. 使用反向传播算法更新网络参数,以最小化总损失。
    6. 重复以上步骤直到模型收敛。
  • 模型结构:VAE包含两个主要部分:推断网络和生成网络&#8203

生成对抗网络(GAN)
  • 基本原理:GAN由生成网络和判别网络组成,通过对抗训练,生成网络不断改进生成数据的质量,判别网络不断提升区分生成数据和真实数据的能力

  • 训练过程

    1. 生成网络从隐空间中随机采样作为输入,生成模拟样本。
    2. 判别网络接收生成样本和真实样本,尝试将它们区分开。
    3. 生成网络和判别网络通过对抗训练,不断优化各自参数。
  • 对抗过程:生成网络的目标是欺骗判别网络,使其无法区分生成样本和真实样本;判别网络的目标是尽可能准确地区分这两者

显式密度模型和隐式密度模型

  • 显式密度模型:明确构建样本的密度函数,通过最大似然估计求解参数。例如高斯混合模型和概率图模型
  • 隐式密度模型:不直接估计数据分布的密度函数,而是通过生成样本来间接反映数据分布,例如变分自编码器和生成对抗网络

含隐变量的概率图模型

概率图模型中隐变量的引入使得模型能够更好地表示数据生成过程

  1. 根据隐变量的先验分布进行采样,得到样本。
  2. 根据条件分布进行采样,生成观测数据。

EM算法

EM算法主要用于估计含有隐变量的概率模型参数

  1. E步(期望步):计算联合分布的条件概率期望,即隐变量的后验概率分布。
  2. M步(极大步):使用E步骤中计算得到的隐变量后验概率,重新估计模型参数。

Wasserstein GAN

Wasserstein GAN (WGAN)引入Wasserstein距离来衡量两个分布之间的距离,相比于KL散度和JS散度,Wasserstein距离在分布重叠较少的情况下仍能有效反映分布的远近;。这解决了生成对抗网络中可能出现的梯度消失问题,提升了模型训练的稳定性和效果。

其他改进模型

  • 条件生成模型:根据特定条件生成数据,提高生成数据的控制性和多样性
  • InfoGAN:引入信息论的概念,通过最大化生成数据和条件变量之间的互信息,增强生成数据的解释性
  • BiGAN:在生成网络和判别网络之外增加编码器,通过编码器和生成网络的交替训练,提高生成数据的质量和一致性

算式推导总结

生成模型的对数边际似然分解

给定一个样本 ( x ),其对数边际似然 ( \log p(x|\theta) ) 可以分解为:
log ⁡ p ( x ∣ θ ) = E q ( z ∣ x ) [ log ⁡ p ( x , z ∣ θ ) − log ⁡ q ( z ∣ x ) ] + K L ( q ( z ∣ x ) ∥ p ( z ∣ x , θ ) ) \ \log p(x|\theta) = \mathbb{E}_{q(z|x)}[\log p(x,z|\theta) - \log q(z|x)] + KL(q(z|x) \| p(z|x,\theta)) \  logp(xθ)=Eq(zx)[logp(x,zθ)logq(zx)]+KL(q(zx)p(zx,θ)) 
其中,第一项是变分自由能,第二项是KL散度,用于衡量后验分布 $\ q(z|x) $ 和真实后验分布 $\ p(z|x,\theta) $ 之间的差异。

GAN模型分析

在传统GAN中,生成器G固定参数时,最优的判别器D要最小化如下损失:
min ⁡ G max ⁡ D V ( D , G ) = E x ∼ p d a t a ( x ) [ log ⁡ D ( x ) ] + E z ∼ p z ( z ) [ log ⁡ ( 1 − D ( G ( z ) ) ) ] \ \min_G \max_D V(D, G) = \mathbb{E}_{x \sim p_{data}(x)}[\log D(x)] + \mathbb{E}_{z \sim p_z(z)}[\log(1 - D(G(z)))] \  GminDmaxV(D,G)=Expdata(x)[logD(x)]+Ezpz(z)[log(1D(G(z)))] 
通过对判别器最优情况进行分析,生成器的损失函数为:
min ⁡ G V ( G ) = − E z ∼ p z ( z ) [ log ⁡ D ( G ( z ) ) ] \ \min_G V(G) = -\mathbb{E}_{z \sim p_z(z)}[\log D(G(z))] \  GminV(G)=Ezpz(z)[logD(G(z))] 

KL散度

前向KL散度和逆向KL散度的定义分别为:

  • 前向KL散度:$ KL(p | q) = \int p(x) \log \frac{p(x)}{q(x)} dx $
  • 逆向KL散度:$ KL(q | p) = \int q(x) \log \frac{q(x)}{p(x)} dx $

这两种散度在计算真实分布 ( p_r(x) ) 和模型分布 ( p_\theta(x) ) 之间的差异时,顺序不同,导致其在优化过程中有不同的表现。

具体算式推导

在深度生成模型中,通过最大似然估计来求解参数时,需要用到以下公式:
log ⁡ p ( x ) = E q ( z ∣ x ) [ log ⁡ p ( x ∣ z ) ] − K L ( q ( z ∣ x ) ∥ p ( z ) ) \log p(x) = \mathbb{E}_{q(z|x)}\left[\log p(x|z)\right] - KL(q(z|x) \| p(z)) logp(x)=Eq(zx)[logp(xz)]KL(q(zx)p(z))

在变分自编码器(VAE)中,通过优化以下变分下界来训练模型:
L ( θ , ϕ ; x ) = E q ϕ ( z ∣ x ) [ log ⁡ p θ ( x ∣ z ) ] − K L ( q ϕ ( z ∣ x ) ∥ p θ ( z ) ) \mathcal{L}(\theta, \phi; x) = \mathbb{E}_{q_\phi(z|x)}[\log p_\theta(x|z)] - KL(q_\phi(z|x) \| p_\theta(z)) L(θ,ϕ;x)=Eqϕ(zx)[logpθ(xz)]KL(qϕ(zx)pθ(z))

这些推导在实际应用中,通过神经网络和反向传播算法进行参数更新,确保模型能够有效地学习数据的潜在表示并生成新数据。

本文由博客一文多发平台 OpenWrite 发布!

本文由博客一文多发平台 OpenWrite 发布!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/14086.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙开发 组件之间的传值

1.Prop:父组件传递给子组件,单向传递,子组件改变值,父组件UI不更新。 引入子组件 并赋值,子组件用Prop 接收 import headerView from ../../common/bean/BaseNavHeaderView headerView({titlestr:添加地址,isback…

go slice 扩容

扩容 slice 会迁移到新的内存位置,新底层数组的长度也会增加,这样就可以放置新增的元素。同时,为了应对未来可能再次发生的 append 操作,新的底层数组的长度,也就是新 slice 的容量是留了一定的 buffer 的。否则&…

【C++】STL快速入门基础

文章目录 STL(Standard Template Library)1、一般介绍2、STL的六大组件2.1、STL容器2.2、STL迭代器2.3、相关容器的函数vectorpairstringqueuepriority_queuestackdequeset, map, multiset, multimapunordered_set, unordered_map, unordered_multiset, …

LabVIEW2022安装教程指南【附安装包】

文章目录 前言一、安装指南1、软件包获取 二、安装步骤总结 前言 LabVIEW是一种程序开发环境,提供一种图形化编程方法,可可视化应用程序的各个方面,包括硬件配置、测量数据和调试,同时可以通过FPGA数学和分析选板中的NI浮点库链接…

有趣的css - 两个圆形加载效果

大家好,我是 Just,这里是「设计师工作日常」,今天分享的是一款小清新的加载动画,适用于 app 列表加载,页面加载或者弹层内容延迟加载等场景。 最新文章通过公众号「设计师工作日常」发布。 目录 整体效果核心代码html…

AWS安全性身份和合规性之Amazon Macie

Amazon Macie是一项数据安全和数据隐私服务,它利用机器学习(ML)和模式匹配来发现和保护敏感数据。可帮助客户发现、分类和保护其敏感数据,以及监控其数据存储库的安全性。 应用场景: 敏感数据发现 一家金融服务公司…

20年交易老兵悟出的宝贵经验,做到这10点或许你也能躺着赚钱

交易要靠亲身体验来真正获得发展,在正确引导下,我们就不会把时间和精力浪费在弯路上。交易之技易学,实难在心态与思考。接下来,我将与您分享一位交易了20年的老兵所积累的10条珍贵经验。 Nial Fuller,一个交易了接近20年的市场“老…

Git远程控制

文章目录 1. 创建仓库1.1 Readme1.2 Issue1.3 Pull request 2. 远程仓库克隆3. 推送远程仓库4. 拉取远程仓库5. 配置Git.gitignore配置别名 使用GitHub可以,采用Gitee也行 1. 创建仓库 1.1 Readme Readme文件相当于这个仓库的说明书,gitee会初始化2两份…

go mod模式下,import gitlab中的项目

背景 为了go项目能够尽可能复用代码,把一些公用的工具类,公用的方法等放到共用包里统一管理。把共用包放到gitlab的私有仓库中。 遇到的问题 通过https方式,执行go get报了错误。 通过ssh方式,执行go get报了错误。 修改配置&am…

介绍一个免费的在线pdf转word网站

Smallpdf.com - A Free Solution to all your PDF Problems 转换效果不错,比那些收费的软件强多了,主要是免费的!

面试八股之MySQL篇2——索引篇

🌈hello,你好鸭,我是Ethan,一名不断学习的码农,很高兴你能来阅读。 ✔️目前博客主要更新Java系列、项目案例、计算机必学四件套等。 🏃人生之义,在于追求,不在成败,勤通…

Springboot阶段项目---《书城项目》

一 项目介绍 本项目采用集成开发平台IntelliJ IDEA开发了在线作业成绩统计系统的设计与实现,实现了图书商城系统的综合功能和图形界面的显示,可以根据每个用户登录系统后,动态展示书城首页图书,实现了分类还有分页查询&#xff0c…

进程、线程——面经(一)

1、什么是进程(Process),线程(Thread),有什么区别? 进程(Process): 定义: 进程是一个独立的执行环境,它拥有独立的内存空间&#xf…

Linux应用入门(二)

1. 输入系统应用编程 1.1 输入系统介绍 常见的输入设备有键盘、鼠标、遥控杆、书写板、触摸屏等。用户经过这些输入设备与Linux系统进行数据交换。这些设备种类繁多,如何去统一它们的接口,Linux为了统一管理这些输入设备实现了一套能兼容所有输入设备的…

怎么压缩pdf pdf在线压缩 pdf文件压缩大小

pdf文件无论在何种设备上打开,PDF文件都能保持其原始的布局和格式,这对于文档共享和打印非常重要。PDF不仅支持文本,还能嵌入图像、视频、音频以及动态链接等元素。PDF文件支持加密和密码保护,可以限制访问、编辑、复制或打印文档…

C语言----深入理解指针(3)

1.字符指针变量 //int main() //{ // char ch w; // char*pc&ch; // printf("%c", *pc); // return 0; //}/*int main() {//char* p "abcdef";//char arr[] "abcdef";//常量字符串 a b c d e f \0//char* pc arr;//将数组首…

高防IP是什么意思?

在网络安全中,企业和用户经常会受到网络攻击和流量攻击,比如DDOS攻击和CC攻击等,那么对于这些网络攻击,企业和用户有什么解决方案呢? 对于网络攻击,高防IP是一种针对网络攻击和分布式拒绝服务攻击设计的IP解…

【002】FlexBison原理分析

0. 前言 Flex和Bison是用于构建处理结构化输入的程序的工具。它们最初是用于构建编译器的工具,但它们已被证明在许多其他领域都很有用。  在第一章中,我们将首先看一点(但不是太多)它们背后的理论,然后我们将深入研究一些使用它…

K8S认证|CKA题库+答案| 5. 创建 Ingress

5 . 创建 Ingress 您必须在以下Cluster/Node上完成此考题: Cluster Master node Worker node k8s master …

基于Tensorflow卷积神经网络垃圾智能分类系统

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景与意义 随着城市化进程的加速,垃圾问题日益严重,垃圾分类成为解决这一问题的关…