Allen

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

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

Allen

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

  • HomePage
  • Categories
  • Archives
  • Essay
  • Tags

重温Seq2Seq和Attention机制

阅读数:41次 2023-01-05
字数统计: 6.3k字   |   阅读时长: 22分

文章导航

× 文章目录
  1. 1. 1. 写在前面
  2. 2. 2. Seq2Seq初识
  3. 3. 3. Seq2Seq的工作原理及计算细节
    1. 3.1. 3.1 Seq2Seq的宏观工作原理
    2. 3.2. 3.2 Seq2Seq的计算细节
      1. 3.2.1. 3.2.1 编码器
      2. 3.2.2. 3.2.2 解码器
  4. 4. 4. Seq2Seq存在的问题及Attention初识
  5. 5. 5. Attention的计算细节
  6. 6. 7. 带有Attention机制的Seq2Seq的简单代码实现
  7. 7. 8. 总结

1. 写在前面

最近用深度学习做一些时间序列预测的实验, 用到了一些循环神经网络的知识, 而当初学这块的时候,只是停留在了表面,并没有深入的学习和研究,只知道大致的原理, 并不知道具体的细节,所以导致现在复现一些经典的神经网络会有困难, 所以这次借着这个机会又把RNN, GRU, LSTM以及Attention的一些东西复习了一遍,真的是每一遍学习都会有新的收获,之前学习过也没有整理, 所以这次也借着这个机会把这一块的基础内容进行一个整理和总结, 顺便了解一下这些结构底层的逻辑。

当然,这次的整理是查缺补漏, 类似于知识的串联, 一些很基础的内容可能不会涉及到, 这一部分由于篇幅很长,所以打算用三篇基础文章来整理, 分别是重温循环神经网络RNN, 重温LSTM和GRU和重温Seq2Seq与Attention机制。 前面两篇已经搞定, 今天是第三篇, 尝试整理Seq2Seq和Attention机制,这次依然是基于前面两篇的知识, 这里的逻辑就是Seq2Seq是一种编码器-解码器的网络结构, 而这里的编码器和解码器就可以是RNN或者是它的变体, 所以如果想弄明白Seq2Seq的工作原理, 就需要先知道RNN或者变体的工作原理。 而Attention是在Seq2Seq的基础上又做了一些改进, 依然是这个结构,只不过在计算的时候加了一些新的东西,使得神经网络在计算的时候有了注意力或者说聚焦的地方,使得网络的工作更高效。

以,这篇文章首先会从Seq2Seq这个结构出发, 说一下Seq2Seq是什么样子的, 为什么要有这个结构, 然后说一下它的计算原理, 最后分析一下单纯的Seq2Seq有什么问题,从而能够引出为什么需要加入Attention, Attention的计算过程如何运用到这个结构中去, 在最后我们可以通过代码的方式看一下如何实现一个带有Attention的Seq2Seq,这样有利于更好的理解细节。 这篇文章的内容有些多, 主要聚焦Attention,这里的Attention整理不像Attention is all you need这篇论文中的那样, 这次重在细节。

大纲如下:

  • Seq2Seq初识
  • Seq2Seq的工作原理和计算细节
  • Seq2Seq存在的问题及Attention初识
  • Attention的计算细节
  • 带有Attention机制的Seq2Seq的简单代码实现
  • 总结

Ok, let’s go!

2. Seq2Seq初识

我们知道, RNN是非常擅长处理序列数据的, 但是RNN能够应对的序列数据场景很有限, 你要是给个句子: The cat, which …, was tired! , 假设我们让RNN预测一句话中的某个词这种的, RNN能够轻松应对。

But, 如果是比较复杂的任务, 不是让RNN预测词语, 而是让它做机器翻译, 我输入一个句子,让它输出一个句子了, 这时候RNN就表现的不是那么出色了, 为啥呢? 因为这种情况, 我们的输入和输出都是不定长的序列,比如将一句中文翻译成英文,那么这句英文的长度有可能会比中文短,也有可能会比中文长, 输出就不确定了。 这时候单独用一个RNN网络就不是那么好了, 所以就想到了能不能用两个RNN网络把输入的处理和输出的处理分开进行呢, 就诞生了Seq2Seq模型。

Seq2Seq模型是输出的长度不确定时采用的模型, 现在应用场景也非常普遍, 在机器翻译, 人机对话等都会看到这种模型的身影。 这个模型长这个样子:

这个就是Seq2Seq的一个结构, 在这里我们会看到, 这种模型使用了两个RNN网络, 左边那个叫做编码器, 负责的是将我们的输入进行编码, 右边的叫做解码器, 负责的是基于左边的编码进行生成我们想要的结果。 这样,就能把输入和输出分开处理, 解决了输入和输出都不定长的问题。 是不是也挺简单的? 其实就是两个RNN而已, 哈哈。

当然, 外表是挺简单的, 但是却有着丰富的内涵, 所以下面就看一看具体的细节, 编码器和解码器到底在干啥。

3. Seq2Seq的工作原理及计算细节

3.1 Seq2Seq的宏观工作原理

在具体介绍编码器和解码器之前, 我们先来宏观的看一下编码器和解码器的工作过程, 这里再放一张和上面不一样的图(不一样的图可以帮助我们更好的理解原理,而不是局限于图本身),这个图出自2014年的一篇经典论文Learning Phrase Representations using RNN Encoder–Decoderfor Statistical Machine Translation

有了这个综合输入句子信息的上下文向量C, 然后把这个作为解码器的输入, 去进行句子的翻译, 当然句子翻译的时候, 可能还需要前面时间步的预测的结果, 所以解码器工作是这样: 在第一个时间步, 会接收一个初始化的y0, 这个表示句子的起始, 一般可以初始化为<bos>, 标志着我句子要开始翻译, 还会接收一个初始化的s0, 这个表示的隐藏状态(之所以用s是为了和编码器那里的隐藏状态h区分开), 然后就是这个输入C, 基于这三个就可以计算出第一个时间步隐藏状态s1和输出y1, 也就是第一个单词。 然后来到第二个时间步,接收第一个时间步的输出y1, 接收第一个时间步的隐藏状态s1和C三个计算出s2和y2, 这样依次进行下去, 直到遇到终止符(一般用<Eos>表示), 也就是说当神经网络预测的概率最大的单词是EOS的时候, 神经网络就终止输出了。

所以, 这个就是Seq2Seq的宏观工作过程, 编码器是接收一个输入, 然后输出一个综合输入信息的上下文向量。 解码器部分接收这个上下文向量和前面时间步的预测值得到后面时间步的预测值,也是我们想要的结果。

那么具体细节呢? 我们下面就分开看看吧:

3.2 Seq2Seq的计算细节

3.2.1 编码器

编码器的作用是把一个不定长的输入序列变换成一个定长的上下文变量C ,并在该背景变量中编码输入序列信息。编码器可以使用循环神经网络。

上面就是编码器的计算细节, 这里用了一个单向的RNN, 每个时间步的隐藏状态只取决于该时间步及之前的输入子序列。我们也可以使用双向循环神经网络构造编码器。在这种情况下,编码器每个时间步的隐藏状态同时取决于该时间步之前和之后的子序列(包括当前时间步的输入),并编码了整个序列的信息。 这个在下面的代码实例中会看到这种方式。

3.2.2 解码器

解码器负责根据语义向量生成指定的序列,

这样就相当于我们要最小化上面的这个函数。 这样就可以选择相应的损失函数(比如交叉熵)去训练模型了。

这就是Seq2Seq的计算细节了, 下面来个图再看一遍这个过程:

好吧, 这图有点魔性, 但是应该能说明上面的过程了, 有个细节就是上面的tanh那个地方, 论文里面的s0初识化成了这个, 原因是想翻译第一个词的时候更多的考虑一下输入的第一个词。 上面那个箭头表示是先逆向运算得到的h1。

这就是Seq2Seq了, 应该挺好理解的吧, 那么这个结构有没有问题呢?

4. Seq2Seq存在的问题及Attention初识

上面的Seq2Seq其实存在一些问题的, 其中最显眼的就是那个C, 上面的Seq2Seq是吧所有的输入信息组合到了一个C上去,然后所有的输出都是基于同样的C去做翻译。

那么我们可以试想一下, 在机器翻译的时候, 如果序列很长, 我翻译第一个单词相当于考虑了所有的输入信息, 这显然不符合我们翻译的习惯(我们人翻译一句话的时候也不是考虑所有的句子再进行翻译吧), 我们做翻译的时候,通常是先将长的句子分段, 翻译的时候, 只聚焦于对某一小段进行翻译, 这样会比较准确。 比如翻译“I love China, because it 巴拉巴拉”, 那么我翻译第一个词的时候, 是不是更关注于” love China”, 然后翻译出“我”, 而不需要关注后面那一长串, 同理翻译love的时候, 更关注I和China多一些?

这其实就是在说, 我们在做翻译的时候,解码器的每一时间步对输入序列中不同时间步的表征或编码信息分配的注意力应该是不同的。 这也是注意力机制的由来。那么如何做到这一点呢?

我们就可以在每个时间步得到不同的上下文向量C, 而这个C的由来, 是对编码器隐藏层输出的一个加权平均, 这个权重,就代表着我对于每个输入所放上去的注意力大小。 这样, 我们翻译的时候, 就可以在不同的时刻只注重某一部分的区域。

所以, 加入注意力机制的Seq2Seq模型是下面的一个感觉:

这里就会看到, 在每个时刻, 都会有一个单独的上下文向量C, 这个C只聚焦于部分输入, 且可以对关注的这部分输入加入不同的权重表示关注度(应该放多少注意力在这个输入上)

那么, 上面这个过程就是这样子的了: 我输入下面的一段话进行翻译, 当第一个时间步的时候, 我想输出jane, 也就是翻译输入的第一个单词, 这时候, 编码器部分的工作是只用到了输入的前三个单词, 进入了RNN, 然后计算出隐藏状态h, 然后会给输入的这三个h进行一个加权求和得到这一个时间步的上下文向量C, 这里的C就是只综合了”jane visite I’Afrique” 这三个单词的信息,并且会把注意力重点放在第一个单词上, 也就是jane的权重会大一些。 这样在解码的时候, 就会更容易的翻译出第一个单词jane。 解码器部分的工作细节和Seq2Seq的基本上一样。 这就是加入Attention的Seq2Seq的宏观工作过程。

如果还没明白, 我找到了一个动画解释上面的宏观过程, 具体链接会在下面给出, 把宏观过程简单总结, 其实就是六步: 输入通过编码器的RNN得到隐藏状态信息、 给每一个隐藏状态信息打分、 把分数进行softmax获得每个隐藏状态的权重、 把权重与隐藏状态相乘、 把前面的相乘结果相加得到上下文向量C、把C放入到解码器就可以进行翻译。 下面采用动画的方式看一下这六步:

  1. 输入通过编码器的RNN得到隐藏状态信息
    我们首先准备第一个解码器的隐藏状态(红色)和所有可用的编码器隐藏状态(绿色)。在下面的示例中,有4个编码器隐藏状态和当前解码器隐藏状态。

  2. 给每一个隐藏状态信息打分
    这个后面在计算的细节会比较详细, 说白了,就是根据解码器前一状态的隐藏信息和当前输入隐藏状态进行一个计算得到每个输入隐藏状态的分数。 这个分数就代表着当前时刻的这些输入对于当前的翻译提供信息的多少(或者说对于当前时间步的翻译的关键程度), 最简单的打分方式就是每个输入和解码器前一隐藏状态进行内积运算获得。

  3. 把分数进行softmax获得每个隐藏状态的权重
    第三步的softmax无非就是把这些想办法让这些分数的加和为1, 这样就得出了每个隐藏状态的权重,并且权重加和为1。

  4. 把权重与隐藏状态相乘
    通过将每个编码器的隐藏状态与其softmax之后的分数(标量)相乘,我们就得到对其向量。

  5. 把前面的相乘结果相加得到上下文向量C

  6. 把C放入到解码器就可以进行翻译

相信这个动画,应该能把这个宏观过程解释的更加明白。 那么下面就看看具体细节, 这个权重到底是啥? 要怎么加? 最后的C应该怎么计算了?

5. Attention的计算细节

关于计算的部分, 我们先从这个上下文向量开始, 先看看这个C现在是怎么计算的, 还记得Seq2Seq的C是怎么计算的吗? 那里我们说是综合了所有的编码器的隐藏状态, 也就是这样的一个公式:

这里再拓展一下, 就是上面的这个过程还可以进行向量化计算,这样计算会高效一些, 广义上,注意力机制的输入包括查询项以及一一对应的键项和值项,其中值项是需要加权平均的一组项。在加权平均中,值项的权重来自查询项以及与该值项对应的键项的计算。这里详细的我在自然语言处理之Attention大详解(Attention is all you need)整理过了, 这里就说一下这个地方怎么向量化。

而GRU我们知道有两个门, 还有个候选隐藏状态:

所以,关于Attention的计算细节, 也就这么多了, 下面简单的实现一个带有Attention的Seq2Seq, 这个作业是来自吴恩达老师的课后作业, 这里只拿出一部分来看, 有利于理解更多的细节。

7. 带有Attention机制的Seq2Seq的简单代码实现

这个大作业里面, 编码器用的是双向的LSTM, 解码器用的是单向的LSTM, 整个带注意力机制的Seq2Seq结构如下:

这个图其实解释的也非常的清楚, 可以当做回顾看一遍, 下面就是简单的实现这个网络, 但是实现之前, 还想先解释一下双向的LSTM究竟是怎么计算的? 编码器这里的隐藏状态输出会看到有一个正向的隐态, 有一个逆向的隐态然后两者进行了一个堆叠, 那么逆向的这个隐态究竟是怎么算的呢? 这里来个双向RNN的图:

其实看这个也挺明白的, 正向隐藏状态的输出我们知道是按照时间步从第一步开始计算,然后依次往后这样计算即可, 那么反向其实是同理的, 无非就是输入的时候我们把输入进行逆序一下就可以了,就相当于先从最后一个时间步开始往前进行计算了, 这样每个时间步就会有一个正向隐藏状态,一个反向隐藏状态, 两者进行一个拼接即可。

好了, 这个问题也说明白了,当然双向RNN不用我们自己实现, 调用相应的包即可。 那么怎么实现上面的结构呢? 思路是这样, 我们下面是一个双向LSTM, 这个有包可以实现, 上面是单向LSTM, 也有包实现, 这么多时间步无非就是一个循环。 但是我们知道, 每个时间步里面都会有一个上下文向量C, 而这个注意力机制是我们要实现的关键, 只要实现了这个注意力机制, 那么这个计算过程就很容易了, 逻辑就是我先根据一个双向的LSTM, 把输入转成隐藏状态, 然后对于每一个时间步的隐态, 我得计算一个上下文向量, 然后把上下文向量作为解码器的输入去计算输出。

所以我们得自己写个函数,来获取一个时间步的上下文向量, 看下面这个图:

这就是一个时间步上下文向量的计算, 输入是解码器上一时刻的隐藏状态, 和编码器所有时间步的隐藏状态(这里考虑了所有时间步, 但是会根据当前位置对时间步的隐态加不同的权重), 而输出就是当前时刻的上下文向量。 过程上面其实都说的挺清楚了, 计算得分, 然后softmax, 然后加和。 当然这里也是采用了向量的方式, 开始写代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
def one_step_attention(a, s_prev):  
"""
这里的a表示的是编码器所有的隐藏状态信息, 维度是(m, Tx, 2*n_a)
s_prev表示的是解码器前一个隐藏状态信息, 维度是(m, n_s) 后面这一维是隐藏单元个数
"""
# 首先, 我们会先给s_prev按照时间步方向扩充维度, 毕竟a里面是所有的时间步, 后面要进行堆叠, 需要维度对应
s_prev = RepeatVector(Tx) # 复制Tx步, 这样s_prev变成了(m, Tx, n_s)

# 下一步就是把a和s_prev堆叠起来一块计算
concat = Concatenate(axis=-1)([a, s_prev]) # (m, Tx, 2*n_a+n_s)

# 下面是计算每个隐藏状态的得分, 加入两个全连接层
e = Dense(10, activation = "tanh")(concat) # (m, Tx, 10)
energies = Dense(1, activation = "relu")(e) # (m, Tx, 1)

# 接下来是softmax得到权重
alpha = Activation(softmax)(energies) # (m, Tx, 1)

# 上下文向量 权重与a相乘然后加和
context = Dot(axes=1)([alpha, y]) # (m, 1, 2*n_a)
# 这里的上下文向量维度依然和当前时间步的编码器输出隐藏状态的维度一致,只不过后者以不同的注意力融合了多个时间步输入的信息。

return context

有了这一步的上下文向量的计算, 上面的的seq2seq就比较容易实现了, 逻辑就是先计算出编码器中的隐藏状态, 然后对于每个解码器的时间步进行遍历, 每一步都是先根据编码器的隐藏状态和上一步的s求当前步的上下文向量c, 然后基于c, 前一步的s, 前一步的y得到当前步的输出, 然后依次循环,直到结束。 代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
def seq2seq_att(Tx, Ty, n_a, n_s, input_dim, output_dim):
"""
Tx: 这个就是编码器的时间步长度
Ty: 这个是解码器的时间步长度
n_a: 编码器隐藏单元个数
n_s: 解码器隐藏单元个数
input_dim: 编码器输入的维度
output_dim: 解码器的输出维度
"""
# 首先要定义输入维度
X = Input(shape=(Tx, input_dim))
s0 = Input(shape=(n_s, ))
c0 = Input(shape=(n_s,))
s = s0
c = c0

# 弄一个列表存放输出结果
outputs = []

# 编码器计算每个时间步的隐藏状态
a = Bidirectional(LSTM(n_a, return_sequences=True), input_shape=(m, Tx, n_a*2))(X) # 这里的return_sequences一定要设置为True, 要输出所有的隐藏状态, 如果是False, 就只输出最后一个时间步的隐藏状态

# 开始计算每一步的输出:
for t in range(Ty):
# 获得当前时间步的上下文向量
context = one_step_attention(a, s)

# 通过解码器的LSTM计算一步输出, 这时候别忘了输入是上下文向量, 还有前一个状态的隐藏信息(注意,LSTM的隐藏状态是两个输出h, c), 这里不需要前一步的输出y
s, _, c = LSTM(n_s, return_state = True)((context, initial_state=[s, c])
) # return_state表示每一步要返回h, c

# 得到输出
out = Dense(output_dim, activation=softmax)(s)

# 保存结果
outputs.append(out)

# 建立最终模型
model = Model(inputs=[X, s0, c0], outputs=outputs)
return model

上面就是一个简单的带有注意力机制的seq2seq的实现过程, 通过代码能更好的帮助理解一些细节,比如attention实现的时候一些向量的维度变化, 再比如LSTM单元的传递有h和c两个向量。 千万不要忘了这里的c, 并且这个c和上下文的context可不一样。

这样, 关于Attention的内容就差不多介绍到了这里。

8. 总结

这篇文章就总结到这里吧, 通过重温的这三篇文章, 又重新学习了一下RNN, LSTM, GRU和Seq2Seq, Attention, 这次学习收获很多,之前都没有学习的这么细, 通过这次机会希望能整理的详细一些, 这篇文章又是挺长的, 下面简单回顾一下。

我们先从seq2seq模型开始说起的, 这个模型是为了应对输入和输出都是不定长的那种任务 ,比如机器翻译, 人机对话等。 这种模型分为编码和解码两部分, 一般由两个RNN网络或者变体组成, 原理就是先基于编码器得到一个综合所有输入的上下文向量C, 然后进行解码,解码的时候, 将C作为解码RNN的输入, 最后得到输出结果。 这一块从宏观和计算细节两方面进行展开。

然后分析了这种结构的弊端就是当前时刻的输出要考虑所有的输入, 这个是不符习惯的,并且会发生序列信息的丢失,当输入的句子越长, 越前面词的信息丢失就越严重。在解码的时候, 当前词以及对应的源语言的上下文信息和位置信息在编解码过程中也会丢失。 当然这里的建模技巧就是将源语言句子再逆序输入,或者重复输入两遍来训练模型,可以达到一定性能的提升。但依然改进有限。

所以引入了注意力机制, 即给输入进行加权, 每个时刻都会有一个上下文向量, 当时每个时刻的上下文向量对所有的输入加了不同的注意力, 也就是当前时刻的输出要重点关注某部分的输入序列。 这个机制就保证了seq2seq模型能够进行长序列的任务。 这一块也是宏观和计算细节两方面展开。加入注意之后,在生成输出词时,会考虑每个输入词和当前输出词的对齐关系, 对齐越好的词,会有越大的权重,对当前生成词的影响也就越大。要注意这里的编码器使用了双向的RNN结构, 这样能够有效的缓解前后信息的丢失情况。

最后,还利用keras简单的实现了一个带有注意力机制的Seq2Seq模型, 了解了一些细节。 总之, Attention机制现在用的非常广泛也非常重要, 关于它的一些知识就介绍到这里。 最后再宏观上看一下带有注意力机制的Seq2Seq的工作过程:

有了这些基础的知识, 就可以进行一些实战任务, 就像第一篇里面说的后面会总结一篇用于时间序列预测非线性自回归模型的论文,这篇论文用的就是带有双阶段注意力机制的LSTM(如果掌握了上面的这些知识点, 就会发现读这篇论文无压力了, 并且很清晰的感觉)。 后面也会使用keras尝试复现并用于时间序列预测的任务,通过这样的方式,可以把这些基础知识从理论变成实践。 这叫做首尾呼应 哈哈!😉

参考:

  • 动手学习深度学习-注意力机制

  • 吴恩达老师深度学习课程

  • 动画图解Attention机制,让你一看就明白

  • Learning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translation

  • NEURAL MACHINE TRANSLATION BY JOINTLY LEARNING TO ALIGN AND TRANSLATE

  • 自然语言处理之Attention大详解(Attention is all you need)

  • 人工智能
  • 人工智能

扫一扫,分享到微信

微信分享二维码
loss不下降的解决方法
重温LSTM和GRU
  1. 1. 1. 写在前面
  2. 2. 2. Seq2Seq初识
  3. 3. 3. Seq2Seq的工作原理及计算细节
    1. 3.1. 3.1 Seq2Seq的宏观工作原理
    2. 3.2. 3.2 Seq2Seq的计算细节
      1. 3.2.1. 3.2.1 编码器
      2. 3.2.2. 3.2.2 解码器
  4. 4. 4. Seq2Seq存在的问题及Attention初识
  5. 5. 5. Attention的计算细节
  6. 6. 7. 带有Attention机制的Seq2Seq的简单代码实现
  7. 7. 8. 总结

Related Issues not found

Please contact @JavaSsun to initialize the comment

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

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