Allen

写代码是热爱,写到世界充满爱

  • HomePage
  • Categories
  • Archives
  • Essay
  • Tags
总文章数 379
所有文章 友链 关于我

Allen

写代码是热爱,写到世界充满爱

  • HomePage
  • Categories
  • Archives
  • Essay
  • Tags

重温深度学习优化算法

阅读数:13次 2023-01-28
字数统计: 6.1k字   |   阅读时长: 21分

文章导航

× 文章目录
  1. 1. 1. 写在前面
  2. 2. 2. 梯度下降
  3. 3. 3. 随机梯度下降
  4. 4. 4. 改进方向一:惯性保持
    1. 4.1. 4.1 动量(Momentum)方法
    2. 4.2. 4.2 NAG算法
  5. 5. 5. 改进方向二:环境感知
    1. 5.1. 5.1 AdaGrad算法
    2. 5.2. 5.2 RMSProp
    3. 5.3. 5.3 AdaDelta算法
  6. 6. 6. Adam算法(Adaptive Moment Estimation)
  7. 7. 7. 理解更多的细节
    1. 7.1. 7.1 理解指数滑动平均
    2. 7.2. 7.2 理解下指数加权平均的偏差修正
    3. 7.3. 7.3 理解里面的超参数选择
  8. 8. 8. 如何选择优化算法

1. 写在前面

最近在补ML和DL的相关基础,发现有些非常重要的知识还是了解的太表面,甚至可以说不知其然也不知其所以然了,所以这段时间想借着找工作的这个机会,通过学习一些优秀的文章和经典书籍,来慢慢的把这块短板也补上来。

今天是深度学习优化算法这块的一个总结,在深度学习中,影响深度深度神经网络训练效果或者说可以加速神经网络训练的重要策略一般有:

  1. 合适的初始化策略: 如果初始化的不好,有可能导致网络没法最终收敛或者中途无法训练(比如初始化0就成了线性,不适当的参数初始化还会导致梯度消失或者爆炸等), 这个之前在pytorch初始化那里都整理过了。

  2. 合适的激活函数: 激活函数的引进给网络带来了非线性,使得网络有更加强大的拟合能力,但是激活函数也不是随便用的,常用的有Sigmoid,tanh,Relu及它的一些变体,而这些激活函数各有各自的特点和应用场景,比如Sigmoid,tanh这种,往往适合做概率值处理或者LSTM的门控机制,而Relu这种,就适合深层网络的训练等等,这个后面也会写一篇文章统一整理下。

  3. 批量归一化策略: Batch Normalization前面写了一篇文章整理过,非常的强大和实用,有了它,可以选择更大的学习率,加速网络训练,可以少考虑初始化带来的烦恼,少考虑使用正则的烦恼,解决了网络隐层层输出的数据分布偏移问题等,more powerful的一个东西,具体可以看这篇

  4. 正则化技术: 这个一般是为了防止网络的拟合能力太强带来的过拟合问题,在深度学习网络中,常用的正则化技术除了L2,L1这种,还有Dropout,包括上面的那个。 后面有时间,也会补上深度学习的正则化这一块。

  5. 优化算法: 这个也是非常重要的一环,也是我这篇文章想要总结的内容。

优化算法可谓是非常重要一个环节,决定着算法模型是否能够找到最优解或者快速的找到最优解,讨论的是模型在参数更新的时候,怎么去更新的问题。这次主要是先整理梯度下降以及从这个基础上衍生出来的改进算法,花书上这部分的内容太多,还有牛顿法,拟牛顿法这些涉及到二阶导数的家族,有些来不及看,后面再慢慢进行补充。 先整理一些耳熟能详但又不是那么清楚的一些。

依然是几个面试题打头:


  1. 训练数据量特别大时,经典的梯度下降法存在什么问题,如何改进?

  2. 随机梯度下降存在的问题以及改进的两大方向?

  3. 介绍下常用的那些优化算法(SGD,Momentum,Nesterov,AdaGrad, RMSProp, AdaDelta, Adam)以及它们的参数更新原理,解决了SGD的什么问题?


2. 梯度下降

首先,先再快速的回顾下啥叫梯度下降, 微积分中,使用梯度表示函数增长最快的方向,因此,神经网络中使用负梯度来指示目标函数下降最快的方向。为啥这个能表示目标函数下降最快的方式呢? 之前也整理过,我们可以把目标函数泰勒展开,会发现当参数更新方向与梯度方向相反的时候,更新速度是最快的,具体可以参考我之前这篇文章

  • 梯度实际上是损失函数对网络中每个参数的偏导所组成的向量;
  • 梯度仅仅指示了对于每个参数各自增长最快的方向,因此,梯度无法保证全局方向就是函数为了达到最小值应该前进的方向;
  • 使用梯度的具体计算方法即反向传播。

梯度下降也是一种优化算法, 通过迭代的方式寻找使模型目标函数达到最小值时的最优参数, 当目标函数为凸函数的时候,梯度下降的解是全局最优解,但在一般情况下,梯度下降无法保证全局最优。

梯度下降法最常用的形式是批量梯度下降(Batch Gradient Descent, BGS), 其做法就是在更新参数的时候使用所有的样本来进行更新。

一般是采用所有训练数据的平均损失来近似目标函数:

优点:由于每一步迭代使用了全部样本,因此当损失函数收敛过程比较稳定。对于凸函数可以收敛到全局最小值,对于非凸函数可以收敛到局部最小值。

问题:经典的梯度下降法在每次对模型参数更新时,需要遍历所有的训练数据,M MM很大时,需要耗费相当大的计算资源,实际应用中基本不可行,不能投入新数据实时更新模型。

3. 随机梯度下降

随机梯度下降(Stochastic Gradient Descent, SGD)是用单个训练样本的损失来近似平均损失,即

因此,随机梯度下降法用单个训练数据即可对模型参数进行一次更新,大大加快了收敛速率,该方法也适用于数据源源不断到来的在线更新场景。

问题:随机梯度下降每步仅仅采样一个或者少量样本来估计当前梯度,计算速度快,内存开销少,但每一步接受的信息量有限,常常对梯度的估计出现偏差,造成目标函数曲线收敛的很不稳定,伴有剧烈波动,有时候甚至不收敛。

为了降低随机梯度的方差,从而使得迭代算法更加稳定,也为了充分利用高度优化的矩阵运算操作,实际应用中,会同时处理若干训练数据,这就是小批量梯度下降(mini-batch Gradient Descent)。目标函数和梯度如下:

m表示一个批次里面的样本个数。 这个也是目前常用的方式(注意这里是在训练样本上个数的选择), 但是在用的时候要注意三个问题:

  1. 如何选取参数m : 不同应用中, 最优的m 通常会不一样,往往需要调参确定。 一般m 取2的幂次时能充分利用矩阵运算操作。 所以可以在2的幂次中选取最优值,32,64,128等,如果感觉内存比较小,可以小一点。

  2. 如何选择m 个训练数据? 为了避免数据的特定顺序对收敛带来的影响,一般在每次遍历训练数据之前,先对数据随机打乱,然后每次迭代时,按顺序挑选m 个训练数据。 也就是每个epoch的时候都会随机打乱一次训练集。

  3. 如何选取学习速率α \alphaα: MBGD不能保证很好的收敛性,如果学习率太小,收敛速度会很慢,如果太大,损失函数就会在极小值出不停的震荡甚至偏离,所以通常用衰减学习率的方案: 一开始采用较大学习率,当误差曲线进入平台期后,减小学习率做更精细的调整。 最优的学习速率也通常需要调参。

所以,MBGD是解决训练数据量过大的一个不错的方案, 而SGD更适用于在线的实时更新,BGD一般很少用于实际中。

But,上面我说了,这是在讨论更新的时候,一次用多少样本更新合适,我们说一般常用的就是SGD(一次拿一个样本来更新参数)或者是MBGD(一次拿几个样本来更新参数)。但是存在的问题依然也是比较明显的,因为这毕竟是拿准确性去换速度嘛。

  • SGD放弃了梯度的准确性, 仅采用一部分样本或者一个样本来估计当前梯度,因此SGD会出现对梯度估计常常出现偏差,造成目标函数收敛不稳定甚至不收敛的情况。BGD是能保证准确性的,毕竟每一步都是载入整个训练集。

  • 无论是经典的梯度下降还是随机梯度下降,都可能陷入局部极值点。这个对于SGD来说,还不是最要命的,毕竟这个现象普遍存在,这种情况可以随机初始化参数,多训练几遍模型试试看。

  • 对SGD来说,最要命的是SGD可能会遇到“峡谷”和“鞍点”两种困境

    • 峡谷类似⼀个带有坡度的狭长小道,左右两侧是 “峭壁”;在峡谷中,准确的梯度方向应该沿着坡的方向向下,但粗糙的梯度估计使其稍有偏离就撞向两侧的峭壁,然后在两个峭壁间来回震荡。

    • 鞍点的形状类似⼀个马鞍,⼀个方向两头翘,⼀个方向两头垂,而中间区域近似平地;⼀旦优化的过程中不慎落入鞍点,优化很可能就会停滞下来(坡度不明显,很可能走错方向,如果梯度为0的区域,SGD无法准确察觉出梯度的微小变化,结果就停下来)。为了形象,还找了个图:

所以接下来的一些算法,就是针对于SGD的这两个要命问题进行的一系列改进了,首先先把握住改进的两个大方向: 惯性保持和环境感知

  • 惯性保持: 加入动量, 代表:Momentum, Nesterov Accerlerated Gradient

  • 环境感知: 根据不同参数的一些经验性判断, 自适应的确定每个参数的学习速率,这是一种自适应学习率的优化算法。代表:AdaGrad, AdaDelta, RMSProp

  • 还有把上面两个方向结合的: Adam, AdaMax, Nadam

这样就把常用的优化算法给分类梳理完毕。 下面就看看这两个大方向是怎么改的,又是解决SGD的什么问题? 介绍具体的优化算法了。

在介绍之前,我们先回顾下随机梯度下降算法中的参数更新公式,因为下面的算法都是在这个公式上进行的一些改进。

4. 改进方向一:惯性保持

4.1 动量(Momentum)方法

动量方法解决的问题:

  1. 随机梯度下降中的“峡谷”和“鞍点”问题
  2. SGD加速,特别是高曲率,小幅但是方向一致,或者带噪声的梯度

《百面机器学习》上的那个比喻很形象:

如果把原始的 SGD 想象成⼀个纸团在重力作用向下滚动,由于质量小受到山壁弹力的干扰大,导致来回震荡。或者在鞍点处因为质量小速度很快减为 0,导致无法离开这块平地。动量方法相当于把纸团换成了铁球。不容易受到外力的干扰,轨迹更加稳定,同时因为在鞍点处因为惯性的作用,更有可能离开平地。

动量算法积累了之前梯度指数级衰减的移动平均,并且继续沿该方向移动,参数更新公式:

所以当前迭代点的下降方向不仅仅取决于当前的梯度,还受到前面所有迭代点的影响。动量方法以一种廉价的方式模拟了二阶梯度(牛顿法)。撤了这么半天理论,拿个图来看看效果:

使用动量的SGD算法流程:

4.2 NAG算法

Nesterov Accelerated Gradient 提出了⼀个针对动量算法的改进措施。动量算法是把历史的梯度和当前的梯度进进行合并,来计算下降的⽅向。而Nesterov 提出,让迭代点先按照历史梯度走⼀步,然后再合并。更新规则如下,改变主要在于梯度的计算上:

1
2
optimizer = tf.train.MomentumOptimizer(learning_rate=learning_rate,
momentum=0.9, use_nesterov=True)

完整的Nesterov动量算法流程:

5. 改进方向二:环境感知

由于SGD中随机采样Batch会引入噪声源,在极小点处的梯度并不会小时。 因此,随着梯度的降低,有必要逐步减小学习率。

SGD对环境的感知是指在参数空间中,根据不同参数的一些经验性判断,自适应的确定参数的学习速率,不同参数的更新步幅是不同的。

5.1 AdaGrad算法

Adaptive Gradient算法的思想是独立地适应模型的每个参数(自动改变学习速率):一直较大偏导的参数相应有一个较小的学习率,初始学习率会下降的较快;而一直小偏导的参数则对应一个较大的学习率,初始学习率会下降的较慢。具体来说,每个参数的学习率会缩放各参数反比于其历史梯度平方值总和的平方根,更新公式:

问题:历史梯度在分母上的累积会越来越大, 所以学习率会越来越小, 使得中后期网络的学习能力越来越弱。

经验上已经发现,对于训练深度神经网络模型而言,从训练开始时积累梯度平方会导致有效学习率过早和过量的减小。AdaGrad 在某些深度学习模型上效果不错,但不是全部。

具体的算法流程:

5.2 RMSProp

RMSProp 是 Geoff Hinton 提出的一种自适应学习率方法。RMSprop 和 Adadelta都是为了解决Adagrad 学习率过度衰减问题的。AdaGrad 根据平方梯度的整个历史来收缩学习率,可能使得学习率在达到局部最小值之前就变得太小而难以继续训练。RMSProp 算法修改 AdaGrad 以在非凸设定下效果更好,改变梯度积累为指数加权的移动平均。

AdaGrad 旨在应用于凸问题时快速收敛。当应用于非凸函数训练神经网络时,学习轨迹可能穿过了很多不同的结构,最终到达一个局部是凸碗的区域。AdaGrad 根据平方梯度的整个历史收缩学习率,可能使得学习率在达到这样的凸结构前就变得太小了。RMSProp 使用指数衰减平均以丢弃遥远过去的历史,使其能够在找到凸碗状结构后快速收敛,它就像一个初始化于该碗状结构的 AdaGrad 算法实例。

RMSProp类似于Momentum中的做法,与Momentum的效果一样,某一维度的导数比较大,则指数加权平均就大,某一维度的导数比较小,则其指数加权平均就小,这样就保证了各维度导数都在一个量级,进而减少了摆动。允许使用一个更大的学习率。

RMSProp 还加入了⼀个超参数 ρ 用于控制衰减速率:

优点:相比于AdaGrad,这种方法更好的解决了深度学习中过早的结束学习的问题,适合处理非平稳目标,对RNN效果很好。

缺点: 引入了新的超参衰减系数ρ

1
2
optimizer = tf.train.RMSPropOptimizer(learning_rate=learning_rate,
momentum=0.9, decay=0.9, epsilon=1e-10)

经验上,RMSProp已被证明是一种有效且实用的深度神经网络优化算法,目前经常采用。采用动量的RMSProp算法:

5.3 AdaDelta算法

6. Adam算法(Adaptive Moment Estimation)

Adam算法之所以单独写出来,是因为它将惯性保持和环境感知这两个优点集于一身。

  1. Adam记录梯度的一阶矩,即过往梯度与当前梯度的平均,体现了保持惯性—历史梯度的指数衰减平均

  2. Adam记录梯度的二阶矩, 即过往梯度平方与当前梯度平方的平均,RMSProp的方式,体现了环境感知的能力,为不用参数产生自适应的学习速率 — 历史梯度平方的指数衰减平均。

一阶矩和二阶矩类似于滑动窗口内求平均的思想进行融合,即当前梯度和近一段时间内的梯度平均值,时间久远的梯度为当前平均值贡献呈指数衰减。参数更新方式如下:

1
optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate)

Adam算法流程如下:

在训练深度神经网络模型时,Adam 优化算法可以被优先选择,它通常比其他优化算法快并且效果好;Adam 算法有三个参数,一般使用默认的参数就可以了,但是如果需要调整的话,建议熟悉一下它的理论,然后根据实际情况设置参数。

为了使得内容更加的完整,这里再来了解一点新的东西。

7. 理解更多的细节

7.1 理解指数滑动平均

上面的很多优化算法里面都见到了一个词叫做指数滑动平均,这个东西到底是干嘛的?这里理解下这个,便于更好的理解上面的改进算法。

指数加权平均在时间序列中经常用于求取平均值的一个方法,它的思想是这样,我们要求取当前时刻的平均值,距离当前时刻越近的那些参数值,它的参考性越大,所占的权重就越大,这个权重是随时间间隔的增大呈指数下降,所以叫做指数滑动平均,公式如下:

看上面这个温度图像,横轴是第几天,然后纵轴是温度, 假设我想求第100天温度的一个平均值,那么根据上面的公式:

可以发现,如果这个β 很高, 比如0.98, 最终得到的温度变化曲线就会平缓一些,因为多平均了几天的温度, 缺点就是曲线进一步右移, 因为现在平均的温度值更多, 要平均更多的值, 指数加权平均公式,在温度变化时,适应的更缓慢一些,所以会出现一些延迟,因为如果β =0.98,这就相当于给前一天加了太多的权重,只有0.02当日温度的权重,所以温度变化时,温度上下起伏,当β 变大时,指数加权平均值适应的更缓慢一些, 换了0.5之后,由于只平均两天的温度值,平均的数据太少,曲线会有很大的噪声,更有可能出现异常值,但这个曲线能够快速适应温度的变化。 所以这个β 过大过小,都会带来问题。 一般取0.9.

这样,就可以发现,当前梯度的更新量会考虑到当前梯度, 上一时刻的梯度,前一时刻的梯度,这样一直往前,只不过越往前权重越小而已。这就是动量的含义了,考虑了之前的梯度保持着一种惯性。而像RMSProp里面的历史梯度平方的指数加权衰减,AdaDelta里面的,Adam里面的指数加权等,其实都是这个意思,考虑前面的梯度或者梯度的平方,求一个平均值来更新当前参数。

7.2 理解下指数加权平均的偏差修正

偏差修正可以让平均数运算更加准确, 看看是怎么做的。这里拿吴恩达老师深度学习的一个例子:

所以预测的初始阶段,才开始预测的热身练习,偏差修正可以帮助更好的预测温度,后期的话热身过去了,偏差修正就起不到作用了

7.3 理解里面的超参数选择

上面各个优化算法中,常用的是Adam,SGD,RMSProp等, 这些优化算法中,有两个比较重要的超参数需要进行调参确定,就是学习率ϵ 和指数衰减系数ρ , 而我们如何为这两个参数选择合适的范围呢?

超参数的随机取值可以提高搜索效率,但是这个随机取值可不是乱随机的,而是应该选择合理的范围,在某个范围内取值,而选择合理范围就需要选择合适的标尺,用于探究这些超参。这个很重要。

假设我们选取的是隐藏单元这种或者神经网络层数这种,那么我们可以确定一个大致的范围,比如隐藏单元50-100,然后在这个范围随机取点尝试, 隐藏层2-8, 从这里面随机取层试验,这两个超参数这样取值是合理的。 但是上面的那两个超参确定范围不能这么玩。

假设我们已知一个学习率的范围是0.00011, 但是我们如果想在这个范围内取比较好的值,就不能像上面那个一样,在这个区间随机的取值了。因为如果用上面这种方式随机的取值,我们会发现90%的数据都落到 0.11之间。

这是因为当ρ 接近1时,所得结果的灵敏度会变化,即使ρ 有很小的变化,如果ρ 在0.9-0.9005之间取值,无关紧要,但ρ 在0.999-0.9995之间取值,这会对算法产生巨大影响,当ρ 接近1,β的细微变化变的很敏感,所以整个取值过程中,需要更加密集的取值,在ρ 接近1的区间内。

就是说虽然还是随机取值,但是不能随便取了,因为这个关系着算法,和上面的ϵ 一样,虽然可以在线性数轴上取值,但是那样这个ϵ 的一个小波动就可能对算法产生很大的影响,即每个点的影响不同,至少要加点权那样子,所以不能随便取。

这个也是比较重要的一个点了。

8. 如何选择优化算法

这里是回答怎么选择优化算法的问题了,《深度学习》里面指出目前这个没有一个确定的定论,如何选,取决于做的任务以及对优化算法的熟练程度。这里整理一个常用参考标准,当然也不是定论:

  1. 对于稀疏数据,尽量使用学习率可自适应的优化方法,不用手动调节,而且最好采用默认值。
  2. SGD通常训练时间更长,但是在好的初始化和学习率调度方案的情况下(很多论文都用SGD),结果更可靠。并且适用于在线的实时更新,推荐里面可是常用
  3. 如果在意更快的收敛,并且需要训练较深较复杂的网络时,推荐使用学习率自适应的优化方法。
  4. Adadelta,RMSprop,Adam是比较相近的算法,在相似的情况下表现差不多 。Adam 就是在 RMSprop 的基础上加了 bias-correction 和 momentum,随着梯度变得稀疏,Adam 比 RMSprop 效果会好。整体来讲,Adam 是最好的选择。

PS: 上面的这些优化器,在TensorFlow或者pytorch里面都有包已经集成好了,我们可以直接拿来用。

下面一张动图看看各个优化器的效果啦, 放松下 😉

参考:

  • 《深度学习》 – 花书
  • 《百面机器学习》
  • 深度学习中的优化问题以及常用优化算法
  • 深度模型中的优化
  • 深度学习中的优化算法总结
  • 系统学习Pytorch笔记七:优化器和学习率调整策略
  • 吴恩达老师的《深度学习课程》
  • 人工智能
  • 人工智能

扫一扫,分享到微信

微信分享二维码
0-零基础入门数据挖掘学习路径
重温归一化(MinMaxScaler)和标准化(StandardScaler)
  1. 1. 1. 写在前面
  2. 2. 2. 梯度下降
  3. 3. 3. 随机梯度下降
  4. 4. 4. 改进方向一:惯性保持
    1. 4.1. 4.1 动量(Momentum)方法
    2. 4.2. 4.2 NAG算法
  5. 5. 5. 改进方向二:环境感知
    1. 5.1. 5.1 AdaGrad算法
    2. 5.2. 5.2 RMSProp
    3. 5.3. 5.3 AdaDelta算法
  6. 6. 6. Adam算法(Adaptive Moment Estimation)
  7. 7. 7. 理解更多的细节
    1. 7.1. 7.1 理解指数滑动平均
    2. 7.2. 7.2 理解下指数加权平均的偏差修正
    3. 7.3. 7.3 理解里面的超参数选择
  8. 8. 8. 如何选择优化算法

Related Issues not found

Please contact @JavaSsun to initialize the comment

© 2018-2024 Allen
Hexo Theme Yilia by Litten
本站总访问量70642次 | 本站访客数63474人
  • 所有文章
  • 友链
  • 关于我

tag:

  • Elasticsearch
  • 面试
  • MQ
  • Redis
  • Nginx
  • Docker
  • Git
  • Dubbo
  • 论文
  • MySql
  • Tools
  • 日志
  • Linux
  • 系统架构
  • Java
  • 源码解析
  • Hexo-yilia
  • Jvm
  • MyBatis
  • SpringBoot
  • Swagger2
  • 算法
  • 分布式
  • Photo
  • HTTP
  • Hystrix
  • SSL
  • ELK
  • IDEA
  • Jwt
  • 定时任务
  • BigData
  • Maven
  • Quartz
  • 人工智能
  • 地图坐标转换
  • 网络编程
  • Python
  • SpringCloud
  • 搬砖结晶
  • OpenCV
  • 推荐系统
  • 目标检测
  • SkLearn
  • 图神经网络
  • PyTorch
  • TensorFlow
  • 数据挖掘
  • 研究生课题-AD检测
  • 研究生成果

    缺失模块。
    1、请确保node版本大于6.2
    2、在博客根目录(注意不是yilia根目录)执行以下命令:
    npm i hexo-generator-json-content --save

    3、在根目录_config.yml里添加配置:

      jsonContent:
        meta: false
        pages: false
        posts:
          title: true
          date: true
          path: true
          text: false
          raw: false
          content: false
          slug: false
          updated: false
          comments: false
          link: false
          permalink: false
          excerpt: false
          categories: false
          tags: true
    

  • 研究生总结

    2024-05-09

    #论文#人工智能#搬砖结晶#图神经网络#研究生课题-AD检测#研究生成果

  • 12-ROI文件分析

    2023-11-22

    #Tools#人工智能#研究生课题-AD检测

  • 11-DTI预处理

    2023-11-16

    #Tools#人工智能#研究生课题-AD检测

  • 10-GRETNA处理fMRI

    2023-11-05

    #Tools#人工智能#研究生课题-AD检测

  • 9-(图)利用Matlab的spm12工具处理fMRI为ROI

    2023-10-28

    #Tools#人工智能#研究生课题-AD检测

  • 9-(文)利用Matlab的spm12工具处理fMRI为ROI

    2023-10-26

    #Tools#人工智能#研究生课题-AD检测

  • 8-7-FSL软件使用

    2023-10-20

    #Tools#人工智能#研究生课题-AD检测

  • 8-6-FreeSurfer软件使用

    2023-10-16

    #Tools#人工智能#研究生课题-AD检测

  • 8-5-SPM软件使用

    2023-10-10

    #Tools#人工智能#研究生课题-AD检测

  • 8-4-MRI预处理

    2023-09-16

    #Tools#人工智能#研究生课题-AD检测

  • 8-3-UNet提取海马体

    2023-09-10

    #人工智能#研究生课题-AD检测

  • 8-2-ADNI论文数据预处理

    2023-09-02

    #论文#Tools#人工智能#研究生课题-AD检测

  • 8-1-数据预处理工具

    2023-08-05

    #Tools#人工智能#研究生课题-AD检测

  • 7-2-GNN For AD

    2023-07-25

    #论文#人工智能#图神经网络#研究生课题-AD检测

  • 7-1-GNN For Medical Diagnosis

    2023-06-28

    #论文#人工智能#图神经网络#研究生课题-AD检测

  • 6-2-SCI一区论文精读

    2023-05-25

    #论文#人工智能#研究生课题-AD检测

  • 6-1-MRI成像及ADNI简介

    2023-05-10

    #人工智能#研究生课题-AD检测

  • 5-ADNI-实验数据筛选与下载

    2023-04-25

    #人工智能#研究生课题-AD检测

  • 4-AD文献的阅读记录

    2023-04-20

    #论文#人工智能#研究生课题-AD检测

  • 3-指标特征选择

    2023-04-05

    #人工智能#研究生课题-AD检测

  • 2-AD有关课题

    2023-03-25

    #人工智能#研究生课题-AD检测

  • 1-阿尔茨海默病

    2023-03-20

    #人工智能#研究生课题-AD检测

  • 7-SHAP

    2023-03-15

    #人工智能#数据挖掘

  • 6-模型的融合技术大总结与结果部署

    2023-02-25

    #人工智能#数据挖掘

  • 5-模型建立与调参

    2023-02-20

    #人工智能#数据挖掘

  • 4-特征工程

    2023-02-12

    #人工智能#数据挖掘

  • 3-数据清洗和转换技巧

    2023-02-09

    #人工智能#数据挖掘

  • 2-数据的探索性-EDA分析

    2023-02-06

    #人工智能#数据挖掘

  • 1-赛题理解

    2023-02-04

    #人工智能#数据挖掘

  • 0-零基础入门数据挖掘学习路径

    2023-02-03

    #人工智能#数据挖掘

  • 重温深度学习优化算法

    2023-01-28

    #人工智能

  • 重温归一化(MinMaxScaler)和标准化(StandardScaler)

    2023-01-20

    #人工智能

  • 重温Batch Normalization

    2023-01-15

    #人工智能

  • 交叉熵损失函数和平方损失的区别

    2023-01-12

    #人工智能

  • loss不下降的解决方法

    2023-01-10

    #人工智能

  • 重温Seq2Seq和Attention机制

    2023-01-05

    #人工智能

  • 重温LSTM和GRU

    2022-12-28

    #人工智能

  • 重温RNN

    2022-12-25

    #人工智能

  • pytorch_geometric离线安装

    2022-12-19

    #人工智能#图神经网络#PyTorch

  • pytorch_geometric安装

    2022-12-18

    #人工智能#图神经网络#PyTorch

  • 生成式对抗网络GAN的工作原理

    2022-12-13

    #人工智能

  • Ubuntu查看cuda-cudnn等版本命令

    2022-12-10

    #Tools#人工智能

  • CUDA和CuDNN安装

    2022-12-08

    #Tools#人工智能

  • GPU之nvidia-smi命令详解

    2022-12-05

    #Tools#人工智能

  • 1-TensorFlow简介及安装

    2022-12-01

    #人工智能#TensorFlow

  • 入门图神经网络

    2022-11-25

    #人工智能#图神经网络

  • 10-模型的保存加载-模型微调-GPU使用及Pytorch常见报错

    2022-11-06

    #人工智能#PyTorch

  • 9-正则化与标准化大总结

    2022-10-28

    #人工智能#PyTorch

  • 8-Tensorboard可视化与Hook机制

    2022-10-25

    #人工智能#PyTorch

  • 7-优化器和学习率调整策略

    2022-10-23

    #人工智能#PyTorch

  • 6-模型的权值初始化与损失函数介绍

    2022-10-20

    #人工智能#PyTorch

  • 5-nn各网络层介绍

    2022-10-17

    #人工智能#PyTorch

  • Pytorch提取神经网络层结构-层参数及自定义初始化

    2022-10-14

    #人工智能#PyTorch

  • 4-模型创建Module-模型容器Containers及AlexNet网络搭建

    2022-10-12

    #人工智能#PyTorch

  • 3-Pytorch数据读取机制(DataLoader)与图像预处理模块(transforms)

    2022-10-09

    #人工智能#PyTorch

  • 2-Pytorch的动态图-自动求导及逻辑回归

    2022-10-02

    #人工智能#PyTorch

  • 1-Pytorch的数据载体张量与线性回归

    2022-09-28

    #人工智能#PyTorch

  • Pytorch与词向量

    2022-09-25

    #人工智能#PyTorch

  • Pytorch基础理论和简单的神经网络实现

    2022-09-23

    #人工智能#PyTorch

  • Windows下的Pytorch环境搭建

    2022-09-20

    #人工智能#PyTorch

  • 图卷积网络-GCN

    2022-09-15

    #人工智能#图神经网络

  • GCN使用的数据集Cora等

    2022-09-10

    #人工智能#图神经网络

  • 图网络属性介绍

    2022-09-08

    #人工智能#图神经网络

  • 图神经网络理论基础

    2022-09-05

    #人工智能#图神经网络

  • 5-AI上推荐之AutoRec与Deep Crossing模型(改变神经网络的复杂程度)

    2022-08-28

    #人工智能#推荐系统

  • 4-AI上推荐之FM和FFM(九九归一)

    2022-08-17

    #人工智能#推荐系统

  • 梯度提升树GBDT的理论学习与细节补充

    2022-08-05

    #人工智能#推荐系统

  • 梯度下降算法的细节补充(凸函数, 导数, 偏导数,梯度, 方向导数以及负梯度下降最快背后的泰勒身影)

    2022-07-28

    #人工智能#推荐系统

  • 逻辑回归、优化算法和正则化的幕后细节补充

    2022-07-24

    #人工智能#推荐系统

  • 3-AI上推荐之逻辑回归模型与GBDT+LR(特征工程模型化的开端)

    2022-07-20

    #人工智能#推荐系统

  • 奇异值分解(SVD)的原理详解及推导

    2022-07-13

    #人工智能#推荐系统

  • 2-AI上推荐之隐语义模型(LFM)和矩阵分解(MF)

    2022-07-10

    #人工智能#推荐系统

  • 1-AI上推荐之协同过滤

    2022-07-02

    #人工智能#推荐系统

  • R-CNN and Fast R-CNN and Faster R-CNN and SPP

    2022-06-15

    #人工智能#目标检测

  • 10-Harris和Shi-Tomas算法

    2022-06-06

    #人工智能#OpenCV

  • 9-角点特征

    2022-06-03

    #人工智能#OpenCV

  • 8-图像变换-傅里叶变换

    2022-05-29

    #人工智能#OpenCV

  • 7-模板匹配与霍夫变换

    2022-05-15

    #人工智能#OpenCV

  • 6-边缘检测

    2022-05-08

    #人工智能#OpenCV

  • 5-直方图

    2022-04-28

    #人工智能#OpenCV

  • 4-图像平滑

    2022-04-26

    #人工智能#OpenCV

  • 3-形态学操作

    2022-04-22

    #人工智能#OpenCV

  • 2-几何变换

    2022-04-20

    #人工智能#OpenCV

  • 1-图像的基础操作

    2022-04-18

    #人工智能#OpenCV

  • 0-OpenCV简介

    2022-04-15

    #人工智能#OpenCV

  • Ubuntu18.04下安装OpenCV3.4

    2022-04-01

    #人工智能#OpenCV

  • 后 R-CNN时代, Faster R-CNN、SSD、YOLO 各类变体统治下的目标检测综述:Faster R-CNN系列胜了吗?

    2022-03-28

    #人工智能#目标检测

  • SKLearn学习总结

    2022-03-20

    #人工智能#SkLearn

  • 详细了解PyCharm支持的4种Python Interpreter和配置方法

    2022-03-02

    #Tools

  • Pycharm远程连接

    2022-02-26

    #Tools

  • JupyterLab学习总结

    2022-02-19

    #Tools#人工智能

  • Anaconda学习总结

    2022-02-13

    #Tools#人工智能

  • Ubuntu下安装lrzsz工具

    2022-02-08

    #Tools

  • 13-RNN

    2022-02-05

    #人工智能

  • 12-加速深度学习的算法和硬件-讲座

    2022-01-10

    #人工智能

  • 11-深度学习硬件算力基础-GPU与TPU与英特尔神经棒

    2021-12-26

    #人工智能

  • 10-经典卷积神经网络架构案例分析

    2021-12-16

    #人工智能

  • 9-迁移学习与fine-tuning

    2021-12-11

    #人工智能

  • 8-CNNS in Practice-卷积神经网络工程实践技巧

    2021-11-28

    #人工智能

  • 7-训练神经网络-下

    2021-11-09

    #人工智能

  • 6-训练神经网络-上

    2021-11-05

    #人工智能

  • 5-可视化并理解卷积神经网络

    2021-10-25

    #人工智能

  • 4-Convolutional-Neural-Networks

    2021-10-18

    #人工智能

  • 3-神经网络与反向传播

    2021-10-10

    #人工智能

  • 2-损失函数和梯度下降

    2021-09-25

    #人工智能

  • 1-KNN&线性分类器

    2021-09-20

    #人工智能

  • 0-机器学习基础

    2021-09-15

    #人工智能

  • 入门人工智能算法工程师-先来碗毒鸡汤

    2021-07-30

    #人工智能

  • 3-如何高效阅读机器学习顶会论文

    2021-07-15

    #论文

  • 2-论文ABC类与一二区的区别

    2021-06-10

    #论文

  • 1-学术小白

    2021-06-06

    #论文

  • 领域驱动设计在互联网业务开发中的实践

    2020-09-13

    #系统架构

  • 领域驱动设计

    2020-07-12

    #系统架构

  • DDD模式-从天书到实践

    2020-06-28

    #系统架构

  • DDD-马什么梅

    2020-06-14

    #系统架构

  • FaaS-又一个为未来

    2020-05-17

    #系统架构

  • 分布式ID的花拳绣腿

    2020-04-19

    #面试#系统架构#分布式

  • 4-Dockerfile上

    2020-04-08

    #Docker

  • 3-Docker存储卷

    2020-04-07

    #Docker

  • 2-Docker容器网络

    2020-04-06

    #Docker

  • 1-安装_使用Docker

    2020-04-05

    #Docker

  • 45-自增ID用完怎么办

    2020-03-11

    #MySql

  • 44-一些常见问题

    2020-03-09

    #MySql

  • 43-要不要使用分区表

    2020-03-08

    #MySql

  • 42-grant之后要跟着flush privileges吗

    2020-03-07

    #MySql

  • 41-如何最快的复制一张表

    2020-03-06

    #MySql

  • 40-insert语句的锁为什么这么多

    2020-03-04

    #MySql

  • 39-自增主键为什么不是连续的

    2020-03-03

    #MySql

  • 38-都说InnoDB好_那还要不要使用Memory引擎

    2020-03-02

    #MySql

  • 37-什么时候会使用内部临时表

    2020-03-01

    #MySql

  • SpringBoot_RabbitMQ配置参数详解

    2020-02-26

    #MQ

  • RabbitMQ安装

    2020-02-26

    #MQ

  • ELK日志平台-中

    2020-02-11

    #日志#ELK

  • ELK日志平台-上

    2020-02-10

    #日志#ELK

  • Java8新特性

    2020-02-08

    #Java

  • 1-Hystrix知多少

    2020-01-01

    #面试#Hystrix

  • 25-Nginx变量原理-应用

    2019-12-13

    #Nginx

  • 24-详解HTTP过滤模块

    2019-12-12

    #Nginx

  • 23-详解HTTP请求的11个阶段

    2019-12-11

    #Nginx

  • 22-如何找到处理请求的Server指令块

    2019-12-10

    #Nginx

  • 21-Nginx中的正则表达式

    2019-12-09

    #Nginx

  • 20-处理HTTP请求头部流程

    2019-12-09

    #Nginx

  • 19-Nginx中Listen指令用法

    2019-12-08

    #Nginx

  • 18-Nginx冲突的配置指令以谁为准

    2019-12-08

    #Nginx

  • 17-Nginx动态模块

    2019-12-07

    #Nginx

  • 16-Nginx容器

    2019-12-06

    #Nginx

  • 15-Worker集成协同工作的关键

    2019-12-06

    #Nginx

  • 14-Nginx连接池处理网络请求-内存池对性能的影响

    2019-12-05

    #Nginx

  • 13-Nginx模块

    2019-12-04

    #Nginx

  • 12-网络收发与Nginx事件模型

    2019-12-03

    #Nginx

  • 11-Nginx架构_相关流程

    2019-12-02

    #Nginx

  • LinkedHashMap实现原理_探险

    2019-11-28

    #Java#源码解析

  • HashTable实现原理_探险

    2019-11-22

    #Java#源码解析

  • HashMap实现原理_探险

    2019-11-20

    #Java#源码解析

  • LinkList实现原理_探险

    2019-11-17

    #Java#源码解析

  • ArrayList实现原理_探险

    2019-11-16

    #Java#源码解析

  • 10-OpenResty用Lua语言实现简单服务

    2019-11-12

    #Nginx

  • 9-SSL-Nginx

    2019-11-11

    #Nginx#SSL

  • 8-Nginx配置文件简易解析

    2019-11-10

    #Nginx

  • 7-Nginx安装详解

    2019-11-09

    #Nginx

  • 6-GoAccess实现可视化并实时监控access日志

    2019-11-08

    #Nginx#Tools#日志

  • 5-Nginx搭建具备缓存功能的反向代理

    2019-11-05

    #Nginx

  • 4-Nginx搭建静态资源Web服务器

    2019-11-01

    #Nginx

  • SpringBoot中jar为什么可以直接运行

    2019-10-30

    #面试#SpringBoot

  • SpringBoot全局异常处理

    2019-10-29

    #面试#SpringBoot

  • SpringBoot事件和监听器

    2019-10-29

    #面试#SpringBoot

  • SpringBoot启动原理

    2019-10-29

    #面试#SpringBoot

  • 36-为什么临时表可以重名

    2019-10-28

    #MySql

  • 35-join语句如何优化

    2019-10-27

    #MySql

  • 34-到底可不可以使用join

    2019-10-26

    #MySql

  • 33-我查这么多数据_会不会把数据库内存打爆

    2019-10-24

    #MySql

  • 32-为什么有kill不掉的语句

    2019-10-23

    #MySql

  • 31-误删数据后除了跑路_还能怎么办

    2019-10-22

    #MySql

  • 3-Nginx命令行演示-重载-热部署-切割

    2019-10-20

    #Nginx

  • 2-Nginx配置语法

    2019-10-17

    #Nginx

  • 1-Nginx的前世今生

    2019-10-15

    #Nginx

  • 0-Nginx访问日志配置及信息详解

    2019-10-11

    #Nginx

  • 分布式事务

    2019-09-19

    #面试#系统架构#分布式

  • 分布式锁

    2019-09-18

    #面试#系统架构#分布式

  • 分布式锁与事务

    2019-09-16

    #面试#系统架构#分布式

  • 数据结构与算法第四阶段学习图

    2019-09-16

    #算法

  • 数据结构与算法第三阶段学习图

    2019-09-16

    #算法

  • 数据结构与算法第二阶段学习图

    2019-09-16

    #算法

  • 数据结构与算法第一阶段学习图

    2019-09-16

    #算法

  • 2018-2019工作总结

    2019-09-15

    #搬砖结晶

  • 开发常见问题

    2019-09-14

    #Java

  • 52-算法实战(五)_如何用学过的数据结构和算法实现一个短网址系统

    2019-09-14

    #算法

  • 30-用动态的观点看加锁

    2019-09-13

    #MySql

  • 29-如何判断一个数据库是不是出问题了

    2019-09-12

    #MySql

  • 28-读写分离有哪些坑

    2019-09-11

    #MySql

  • 51-算法实战(四)_剖析微服务接口鉴权限流背后的数据结构和算法

    2019-09-09

    #算法

  • 50-算法实战(三)_剖析高性能队列Disruptor背后的数据结构和算法

    2019-09-06

    #算法

  • 49-算法实战(二)_剖析搜索引擎背后的经典数据结构和算法

    2019-09-02

    #算法

  • 27-主库出问题了_从库怎么办

    2019-08-29

    #MySql

  • 26-备库为什么会延迟好几个小时

    2019-08-28

    #MySql

  • 25-MySQL是怎么保证高可用的

    2019-08-27

    #MySql

  • 24-MySQL是怎么保证主备一致的

    2019-08-26

    #MySql

  • 48-算法实战(一)_剖析Redis常用数据类型对应的数据结构

    2019-08-25

    #算法

  • 47-并行算法_如何利用并行处理提高算法的执行效率

    2019-08-20

    #算法

  • 46-索引_如何在海量数据中快速查找某个数据

    2019-08-16

    #算法

  • 45-搜索_如何用A*搜索算法实现游戏中的寻路功能

    2019-08-13

    #算法

  • 44-B+树_MySQL数据库索引是如何实现的

    2019-08-10

    #算法

  • 43-向量空间_如何实现一个简单的音乐推荐系统

    2019-08-08

    #算法

  • 42-概率统计_如何利用朴素贝叶斯算法过滤垃圾短信

    2019-08-05

    #算法

  • 41-位图_如何实现网页爬虫中的URL去重功能

    2019-08-02

    #算法

  • 40-最短路径_地图软件是如何计算出最优出行路径的

    2019-07-28

    #算法

  • 39-拓扑排序_如何确定代码源文件的编译依赖关系

    2019-07-24

    #算法

  • 38-动态规划实战_如何实现搜索引擎中的拼写纠错功能

    2019-07-20

    #算法

  • 23-MySQL是如何保证数据不丢的

    2019-07-19

    #MySql

  • 22-MySQL有哪些“饮鸩止渴”提高性能的方法

    2019-07-18

    #MySql

  • 21-为什么我只改一行的语句_锁还这么多

    2019-07-17

    #MySql

  • 20-幻读是什么_幻读有什么问题

    2019-07-16

    #MySql

  • 19-只查一行的语句为何执行这么慢

    2019-07-15

    #MySql

  • 37-动态规划理论_一篇文章带你彻底搞懂最优子结结构_无后效性_重复子问题

    2019-07-13

    #算法

  • 36-初识动态规划_如何巧妙解解决“双十一”购物时的凑单问题

    2019-07-09

    #算法

  • 35-回溯算法_从电影《蝴蝶效应》中学习回溯算法的核心思想

    2019-07-06

    #算法

  • 34-分治算法_谈一谈大规模计算框架MapReduce中的分治思想

    2019-07-04

    #算法

  • 33-贪心算法_如何用贪心算法实现Huffman压缩编码

    2019-07-01

    #算法

  • 32-AC自动机_如何用多模式串匹配实现敏感词过滤功能

    2019-06-25

    #算法

  • 18-SQL语句逻辑相同_性能却为何差异巨大

    2019-06-23

    #MySql

  • 17-如何正确的显示随机消息

    2019-06-22

    #MySql

  • 16-MySQL中order by是如何工作的

    2019-06-20

    #MySql

  • 15-日志和索引有关问题

    2019-06-18

    #MySql

  • RocketMQ探索

    2019-06-17

    #MQ

  • 14-count(\*)为什么这么慢

    2019-06-16

    #MySql

  • 13-为什么表数据删掉一半而表文件大小不变

    2019-06-15

    #MySql

  • 12-为什么我的MySQL会“抖”一下

    2019-06-13

    #MySql

  • 11-怎么给字符串字段加索引

    2019-06-12

    #MySql

  • 10-MySQL为什么有时候会选错索引

    2019-06-11

    #MySql

  • 3-3-Docker容器用法

    2019-06-10

    #Docker

  • RabbitMQ详解

    2019-06-08

    #MQ

  • 5-分布式会话_锁_事务_高并发系统设计

    2019-06-07

    #面试

  • 3.2-Docker镜像用法

    2019-06-05

    #Docker

  • 4-Zookeeperer使用场景

    2019-06-04

    #面试

  • Dubbo知多少

    2019-06-03

    #面试#Dubbo

  • 3-分布式系统中接口调用顺序性如何保证

    2019-06-03

    #面试#Dubbo

  • 2-分布式系统中接口的幂等性该如何保证_比如不能重复扣款

    2019-06-02

    #面试#Dubbo

  • 1-分布式系统连环炮_Dubbo有关知识点

    2019-06-01

    #面试#Dubbo

  • 9-普通索引和唯一索引如何选择

    2019-05-30

    #MySql

  • 8-事务到底是隔离的还是不隔离的

    2019-05-29

    #MySql

  • 7-行锁功过_怎么减少行锁对性能的影响

    2019-05-28

    #MySql

  • 6-全局锁和表锁_给表加个字段怎么有这么多阻碍

    2019-05-27

    #MySql

  • 5-深入浅出索引(下)

    2019-05-26

    #MySql

  • 4-深入浅出索引(上)

    2019-05-25

    #MySql

  • 3.1-Docker用法

    2019-05-24

    #Docker

  • 2.2-Docker启动报错

    2019-05-23

    #Docker

  • 3-事务隔离_为什么你改了我还看不见

    2019-05-21

    #MySql

  • MySQL重要日志

    2019-05-20

    #面试#MySql

  • 2-日志系统_一条SQL更新语句是如何执行的

    2019-05-20

    #MySql

  • 1-基础架构_一条SQL查询语句是如何执行的

    2019-05-19

    #MySql

  • 2.1-Docker安装与部署

    2019-05-18

    #Docker

  • 1-Docker缘由

    2019-05-12

    #Docker

  • 0-Docker配置国内免费registry_mirror

    2019-05-08

    #Docker

  • 5-分布式搜索引擎如何部署

    2019-04-26

    #Elasticsearch#面试

  • 4-ES如何在几十亿数据场景下优化查询性能

    2019-04-23

    #Elasticsearch#面试

  • 3-ES读写数据的工作原理

    2019-04-22

    #Elasticsearch#面试

  • 2-分布式搜索引擎的架构是如何设计的

    2019-04-21

    #Elasticsearch#面试

  • 1-面试官对分布式搜索引擎的4个连环炮

    2019-04-20

    #Elasticsearch#面试

  • 8-如何设计一个消息队列

    2019-04-10

    #面试#MQ

  • 7-消息队列如何解决延迟_过期失效_积压消息等问题

    2019-04-10

    #面试#MQ

  • JWT学习

    2019-04-09

    #Java#Jwt

  • 6-消息队列如何保证消息的顺序性

    2019-04-08

    #面试#MQ

  • 5-消息队列如何保证可靠性传输(消息丢了怎么办)

    2019-04-07

    #面试#MQ

  • 4-消息队列消费到重复数据怎么办

    2019-04-06

    #面试#MQ

  • 3-消息队列如何保证高可用性

    2019-04-03

    #面试#MQ

  • 2-消息队列引入原原因_优缺点_应用场景_技术选型

    2019-04-02

    #面试#MQ

  • 1-面试官对消息队列的10个连环炮

    2019-04-01

    #面试#MQ

  • Git常见200+条命令

    2019-03-28

    #Git

  • 8-GitLab简单操作

    2019-03-25

    #Git

  • 31-Trie树_如何实现搜索引擎的搜索关键词提示功能

    2019-03-12

    #算法

  • 7-基于GitHub进行团队协作

    2019-03-09

    #Git

  • 30-字符串匹配基础下_如何借助BM算法轻松理解KMP算法

    2019-03-06

    #算法

  • 29-字符串匹配基础中_如何实现文本编辑器中的查找功能

    2019-03-03

    #算法

  • 28-字符串匹配基础上_如何借助哈希算法实现高效字符串匹配

    2019-03-01

    #算法

  • 6-GitHub的认识与使用

    2019-02-25

    #Git

  • 5-Git集成使用禁忌

    2019-02-15

    #Git

  • 27-深度和广度优先搜索_如何找出社交网络中的三度好友关系

    2019-02-13

    #算法

  • 26-图的表示_如何存储微博微信等社交网络中的好友关系

    2019-02-10

    #算法

  • 国内地图坐标系转换

    2019-02-08

    #地图坐标转换

  • 4-Git多人单分支集成协作时的常见场景

    2019-02-08

    #Git

  • 微服务架构-下篇

    2019-02-06

    #系统架构

  • 微服务架构-中篇

    2019-02-03

    #系统架构

  • 微服务架构-上篇

    2019-02-01

    #系统架构

  • Python数据分析工具

    2019-01-30

    #Python

  • Python高级篇

    2019-01-29

    #Python

  • Python中级篇_下

    2019-01-28

    #Python

  • Python中级篇_上

    2019-01-27

    #Python

  • Python初级篇

    2019-01-26

    #Python

  • Python前世今生

    2019-01-25

    #Python

  • 源码分析-MyBatis数据源与连接池

    2019-01-23

    #MyBatis

  • MyBatis初始化做了什么

    2019-01-21

    #MyBatis

  • 3-Git与GitHub简单同步

    2019-01-20

    #Git

  • 2-Git常用场景

    2019-01-18

    #Git

  • 1-Git安装及简单操作

    2019-01-15

    #Git

  • SpringCloud探索与实战

    2019-01-13

    #SpringCloud

  • MyBatis架构与原理

    2019-01-09

    #MyBatis

  • MyBatis原理概括

    2019-01-08

    #MyBatis

  • MyBatis多数据源配置

    2019-01-07

    #MyBatis

  • JVM(八):Jvm知识点概览

    2019-01-06

    #Jvm

  • JVM(七):Jvm调优-工具

    2019-01-05

    #Tools#Jvm

  • JVM(六):Java服务GC参数调优案例

    2019-01-03

    #Jvm

  • JVM(五):GC分析

    2019-01-02

    #Jvm

  • JVM(四):Jvm调优-命令

    2019-01-01

    #Jvm

  • JVM(三):GC算法_垃圾收集器

    2019-01-01

    #Jvm

  • 25-堆的应用_如何获取Top10最热门的搜索关键词

    2018-12-30

    #算法

  • 24-堆和堆排序_为什么说堆排序没有快速排序快

    2018-12-29

    #算法

  • 23-递归树_如何借助树来求解递归算法的时间复杂度

    2018-12-27

    #算法

  • 22-红黑树下_实现红黑树的技巧

    2018-12-25

    #算法

  • 21-红黑树上_为什么工程中都用红黑树这种二叉树

    2018-12-23

    #算法

  • 应用架构演变过程

    2018-12-20

    #Photo

  • MyBatis常用插件

    2018-12-14

    #MyBatis

  • JVM(二):Jvm内存结构

    2018-12-11

    #Jvm

  • JVM(一):Java类加载机制

    2018-12-10

    #Jvm

  • Map-Reduce学习

    2018-11-20

    #BigData

  • 20-二叉树基础下_有了如此高效的散列表—_为什么还需要二叉树

    2018-11-18

    #算法

  • 19-二叉树基础上_什么样的二叉树适合用数组来存储

    2018-11-16

    #算法

  • 18-哈希算法下_哈希算法在分布式系统中有哪些应用

    2018-11-15

    #算法

  • 17-哈希算法上_如何防止数据库中的用户信息被脱库

    2018-11-13

    #算法

  • Hadoop学习

    2018-11-10

    #BigData

  • 16-散列表下_为什么散列表和链表经常一起使用

    2018-11-09

    #算法

  • 15-散列表中_如何打造一个工业级水平的散列表

    2018-11-09

    #算法

  • 14-散列表上_Word文档中的单词拼写检查功能如何实现

    2018-11-08

    #算法

  • 13-跳表_为什么Redis一定要用跳表来实现有序集合

    2018-11-06

    #算法

  • 12-二分查找下_如何快速定位IP对应的省份地址

    2018-11-04

    #算法

  • 11-二分查找上_如何用最省内存的方式实现快速查找功能

    2018-11-02

    #算法

  • 10-排序优化_如何实现一个通用的高性能的排序函数

    2018-11-01

    #算法

  • 9-线性排序_如何根据年龄给100万用户数据排序

    2018-10-28

    #算法

  • 8-排序下_如何用快排思想在O(n)内查找第K大元素

    2018-10-24

    #算法

  • 7-排序上_为什么插入排序比冒泡排序更受欢迎

    2018-10-22

    #算法

  • 6-递归_如何用三行代码找到最终推荐人

    2018-10-20

    #算法

  • 高性能队列-Disruptor

    2018-10-18

    #MQ#Java

  • 5-队列_队列在线程池等有限资源池中的应用

    2018-10-16

    #算法

  • 4-栈_如何实现浏览器的前进和后退功能

    2018-10-13

    #算法

  • Quartz学习

    2018-10-09

    #Java#定时任务#Quartz

  • 3-链表下_如何轻松写出正确的链表代码

    2018-10-06

    #算法

  • 2-链表上_如何实现LRU缓存淘汰算法

    2018-10-06

    #算法

  • 1-数组_为什么很多编程语言中数组都从0开始编号

    2018-10-02

    #算法

  • 复杂度分析-下部

    2018-09-29

    #算法

  • 复杂度分析-上部

    2018-09-28

    #算法

  • 数据结构与算法概览

    2018-09-26

    #算法

  • 请求与响应

    2018-09-17

    #HTTP

  • TextRank基本了解

    2018-09-01

    #算法

  • (5)Hexo踩坑_主题优化

    2018-08-21

    #Hexo-yilia

  • (4)Hexo撰写文章

    2018-08-19

    #Hexo-yilia

  • (3)Hexo常用命令详解

    2018-08-19

    #Hexo-yilia

  • (2)Hexo配置文件详解

    2018-08-17

    #Hexo-yilia

  • 关于Firewalld二三事

    2018-08-15

    #Linux

  • (1)Hexo博客搭建

    2018-08-11

    #Hexo-yilia

  • 修改Vim_tab为4个空格

    2018-08-06

    #Linux

  • CentOs7防火墙开端口测试

    2018-08-01

    #Linux

  • 10-Redis的并发竞争问题及生产环境集群部署架构

    2018-07-30

    #面试#Redis

  • 9-如何保证缓存与数据库双写时的数据一致性

    2018-07-29

    #面试#Redis

  • 8-如何应对缓存雪崩及穿透问题

    2018-07-28

    #面试#Redis

  • 7-Redis集群模式原理

    2018-07-26

    #面试#Redis

  • Redis所需安装包及各种依赖

    2018-07-25

    #Redis

  • 6-Redis挂掉重启后数据如何进行恢复

    2018-07-24

    #面试#Redis

  • 5-Redis高并发高可用有关问题

    2018-07-21

    #面试#Redis

  • 4-Redis过期策略_手写LRU

    2018-07-19

    #面试#Redis

  • 3-Redis常用数据类型及使用场景

    2018-07-18

    #面试#Redis

  • 2-Redis线程模型_单线程效率高的原因

    2018-07-17

    #面试#Redis

  • 1-项目中缓存如何使用

    2018-07-16

    #面试#Redis

  • AWK三剑客

    2018-07-15

    #Linux

  • Maven插件-assembly插件基本使用

    2018-06-28

    #Java#Maven

  • Maven知多少

    2018-06-27

    #Java#Maven

  • 1-分库分表知多少

    2018-06-25

    #面试#MySql

  • MySQL基本用法

    2018-06-21

    #MySql

  • MySQL安装

    2018-06-20

    #MySql

  • Swagger2学习与集成

    2018-05-20

    #SpringBoot#Swagger2

  • SpringBoot面试

    2018-05-16

    #面试#SpringBoot

  • SpringBoot+Docker简单配置

    2018-05-15

    #Docker#SpringBoot

  • Java定时任务

    2018-05-13

    #Java#定时任务

  • Netty知多少

    2018-05-05

    #网络编程

  • Java编程瞎侃

    2018-04-18

    #Java

  • Vim常用操作

    2018-03-25

    #Linux

  • Linux定时任务Crontab详解

    2018-03-23

    #Linux

  • Linux常用插件及乱码

    2018-03-20

    #Linux

  • Linux安装常用软件

    2018-03-19

    #Linux

  • Idea常用插件及个性化配置

    2018-03-18

    #Tools#IDEA

  • Host-Vm相互ping不同到的解决办法

    2018-03-16

    #Linux

  • GitHub
  • 廖雪峰
  • 纯洁的微笑
  • 我没有三颗心脏
  • 阿里巴巴开源镜像网站
一个脱离了高级趣味的人!