精华内容
下载资源
问答
  • 机器学习论文分享.pptx
  • Super-Paper-Sharing 经典论文分享 《遥感目标检测》 《医学图像分割》 《文字图像识别》
  • 机械工程中的创新设计论文分享.doc
  • SLAMPaperReading 线下SLAM论文分享资料 每期论文分工文档(找到对应的每一期的Sheet): ://shimo.im/sheets/yXkttWD9qCDqrytP/dP5Je
  • 20200304-march=c910和论文分享-wangpeng.pdf
  • 这个ppt是关于在CVPR2019上发表的论文——“Deep Plug-and-Play Super-Resolution for Arbitrary Blur Kernels”的论文分享讲义,我会按照我制作的ppt中的思路,在博客中,详细分析这篇论文。
  • 2.Deep Learning for Anomaly Detection A Review 论文分享(中).pdf
  • 《DCFEE》论文分享.pptx

    2021-09-23 16:45:38
    ppt论文讲解分享《DCFEE》
  • 论文分享-A Review.pdf

    2021-07-12 18:48:40
    这是关于文章 Deep Learning for Anomaly Detection: A Review 为组内同学做分享时做的ppt
  • 在最近举行的Magma Design Automation用户组大会Fusion 03上,设计师分享了使用Magma IC物理设计工具的技巧。Magma公司Fusion用户组主席Pallab Chatterjee称,此次会议有120位参加者及14篇论文。他指出Veritools、...
  • 神经网络博士论文分享给大家适合初学者-基于精准农业预测中若干问题的研究.rar 1.JPG 这是一篇博士论文,里面讲神经网络的部分写得很详细,有详细的代码解释,和适合初学者,同时...
  • 论文分享01:预应力锚索5篇. 预应力锚索的三维数值模拟及其锚固机理分析.PDF 预应力锚索的三维数值模拟及其应用研究.pdf 预应力锚索荷载分布机理原位试验研究.pdf 预应力锚索框架作用下附加应力的FLAC~3D模拟.pdf ...
  • 分享一下2019年数学建模比赛的优秀论文A-D题,一共18篇,2019年的国赛我做的是B题,惨败,看了人家做的才知道差距在哪里,再附上自己学校的几个学长学姐做的获的国二,希望以后的国赛大家一起加油!2020打算再战数学...
  • 读lamport经典论文分享

    2016-03-23 10:52:35
    LamPort对分布式系统中时间同步的描述
  • 论文分享-- >word2Vec论文总结

    千次阅读 2018-04-26 15:33:51
    一直以来,对word2vecword2vec,以及对 tensorflowtensorflow 里面的wordEmbeddingwordEmbedding底层实现原理一直模糊不清,由此决心阅读word2Vecword2Vec的两篇原始论文,...

    博客内容将首发在微信公众号"跟我一起读论文啦啦",上面会定期分享机器学习、深度学习、数据挖掘、自然语言处理等高质量论文,欢迎关注!

    一直以来,对 w o r d 2 v e c word2vec word2vec,以及对 t e n s o r f l o w tensorflow tensorflow 里面的 w o r d E m b e d d i n g wordEmbedding wordEmbedding底层实现原理一直模糊不清,由此决心阅读 w o r d 2 V e c word2Vec word2Vec的两篇原始论文, E f f i c i e n t   E s t i m a t i o n   o f   W o r d   R e p r e s e n t a t i o n s   i n   V e c t o r   S p a c e Efficient\ Estimation\ of\ Word\ Representations\ in\ Vector\ Space Efficient Estimation of Word Representations in Vector Space D i s t r i b u t e d   R e p r e s e n t a t i o n s   o f   W o r d s   a n d   P h r a s e s   a n d   t h e i r   C o m p o s i t i o n a l i t y Distributed\ Representations\ of\ Words\ and\ Phrases\ and\ their\ Compositionality Distributed Representations of Words and Phrases and their Compositionality,看完以后还是有点半懂半不懂的感觉,于是又结合网上的一些比较好的讲解(Word2Vec Tutorial - The Skip-Gram Model),以及开源的实现代码理解了一遍,在此总结一下。
    这里写图片描述

    下面主要以 s k i p − g r a m skip-gram skipgram 模型来介绍 w o r d 2 V e c word2Vec word2Vec

    word2vec工作流程

    1. w o r d 2 V e c word2Vec word2Vec只是一个 三层 的神经网络。
    2. 喂给模型一个 w o r d word word,然后用来预测它周边的词。
    3. 然后去掉最后一层,只保存 i n p u t _ l a y e r input\_layer input_layer h i d d e n _ l a y e r hidden\_layer hidden_layer
    4. 从词表中选取一个词,喂给模型,在 h i d d e n _ l a y e r hidden\_layer hidden_layer 将会给出该词的 e m b e d d i n g   r e p e s e n t a t i o n embedding\ repesentation embedding repesentation
    import numpy as np
    import tensorflow as tf
    corpus_raw = 'He is the king . The king is royal . She is the royal  queen '
    # convert to lower case
    corpus_raw = corpus_raw.lower()
    

    上述代码非常简单和易懂,现在我们需要获取 i n p u t   o u t p u t   p a i r input\ output\ pair input output pair,假设我们现在有这样一个任务,喂给模型一个词,我们需要获取它周边的词,举例来说,就是获取该词前 n n n个和后 n n n个词,那么这个 n n n就是代码中的 w i n d o w _ s i z e window\_size window_size,例如下图:

    这里写图片描述

    注意:如果这个词是一个句子的开头或结尾, w i n d o w window window 忽略窗外的词。

    我们需要对文本数据进行一个简单的预处理,创建一个 w o r d 2 i n t word2int word2int的字典和 i n t 2 w o r d int2word int2word的字典。

    words = []
    for word in corpus_raw.split():
        if word != '.': # because we don't want to treat . as a word
            words.append(word)
    words = set(words) # so that all duplicate words are removed
    word2int = {}
    int2word = {}
    vocab_size = len(words) # gives the total number of unique words
    for i,word in enumerate(words):
        word2int[word] = i
        int2word[i] = word
    

    来看看这个字典有啥效果:

    print(word2int['queen'])
    -> 42 (say)
    print(int2word[42])
    -> 'queen'
    

    好,现在可以获取训练数据啦

    data = []
    WINDOW_SIZE = 2
    for sentence in sentences:
        for word_index, word in enumerate(sentence):
            for nb_word in sentence[max(word_index - WINDOW_SIZE, 0) : min(word_index + WINDOW_SIZE, len(sentence)) + 1] : 
                if nb_word != word:
                    data.append([word, nb_word])
    

    上述代码就是切句子,然后切词,得出的一个个训练样本 [ w o r d ,   n b _ w o r d ] [word,\ nb\_word] [word, nb_word],其中 w o r d word word就是模型输入, n b _ w o r d nb\_word nb_word就是该词周边的某个单词。

    d a t a data data打印出来看看?

    print(data)
    [['he', 'is'],
     ['he', 'the'],
     ['is', 'he'],
     ['is', 'the'],
     ['is', 'king'],
     ['the', 'he'],
     ['the', 'is'],
     ['the', 'king'],
    .
    .
    .
    ]
    

    现在我们有了训练数据了,但是需要将它转成模型可读可理解的形式,这时,上面的 w o r d 2 i n t word2int word2int字典的作用就来了。

    来,我们更进一步的对 w o r d word word进行处理,并使其转成 o n e − h o t one-hot onehot向量

    i.e., 
    say we have a vocabulary of 3 words : pen, pineapple, apple
    where 
    word2int['pen'] -> 0 -> [1 0 0]
    word2int['pineapple'] -> 1 -> [0 1 0]
    word2int['apple'] -> 2 -> [0 0 1]
    

    那么为啥是 o n e − h o t one-hot onehot特征呢?稍后将解释。

    # function to convert numbers to one hot vectors
    def to_one_hot(data_point_index, vocab_size):
        temp = np.zeros(vocab_size)
        temp[data_point_index] = 1
        return temp
    x_train = [] # input word
    y_train = [] # output word
    for data_word in data:
        x_train.append(to_one_hot(word2int[ data_word[0] ], vocab_size))
        y_train.append(to_one_hot(word2int[ data_word[1] ], vocab_size))
    # convert them to numpy arrays
    x_train = np.asarray(x_train)
    y_train = np.asarray(y_train)
    

    利用 t e n s o r f l o w tensorflow tensorflow建立模型

    # making placeholders for x_train and y_train
    x = tf.placeholder(tf.float32, shape=(None, vocab_size))
    y_label = tf.placeholder(tf.float32, shape=(None, vocab_size))
    

    这里写图片描述

    由上图,我们可以看出,我们将 i n p u t input input转换成 e m b e d d i n g _ r e p r e s e n t a t i o n embedding\_representation embedding_representation,并且将 v o c a b S i z e vocabSize vocabSize维度降低到设定的 e m b e d d i n g _ d i m embedding\_dim embedding_dim

    EMBEDDING_DIM = 5 # you can choose your own number
    W1 = tf.Variable(tf.random_normal([vocab_size, EMBEDDING_DIM]))
    b1 = tf.Variable(tf.random_normal([EMBEDDING_DIM])) #bias
    hidden_representation = tf.add(tf.matmul(x,W1), b1)
    

    接下来,我们需要使用 s o f t m a x softmax softmax函数来预测该 w o r d word word周边的词。

    这里写图片描述

    W2 = tf.Variable(tf.random_normal([EMBEDDING_DIM, vocab_size]))
    b2 = tf.Variable(tf.random_normal([vocab_size]))
    prediction = tf.nn.softmax(tf.add( tf.matmul(hidden_representation, W2), b2))
    

    所以整体的过程如下:

    这里写图片描述

    input_one_hot  --->  embedded repr. ---> predicted_neighbour_prob
    predicted_prob will be compared against a one hot vector to correct it.
    

    好了,来看看怎么训这个模型

    sess = tf.Session()
    init = tf.global_variables_initializer()
    sess.run(init) #make sure you do this!
    # define the loss function:
    cross_entropy_loss = tf.reduce_mean(-tf.reduce_sum(y_label * tf.log(prediction), reduction_indices=[1]))
    # define the training step:
    train_step = tf.train.GradientDescentOptimizer(0.1).minimize(cross_entropy_loss)
    n_iters = 10000
    # train for n_iter iterations
    for _ in range(n_iters):
        sess.run(train_step, feed_dict={x: x_train, y_label: y_train})
        print('loss is : ', sess.run(cross_entropy_loss, feed_dict={x: x_train, y_label: y_train}))
    

    在训的过程中,你可以看到 l o s s loss loss的变化:

    loss is :  2.73213
    loss is :  2.30519
    loss is :  2.11106
    loss is :  1.9916
    loss is :  1.90923
    loss is :  1.84837
    loss is :  1.80133
    loss is :  1.76381
    loss is :  1.73312
    loss is :  1.70745
    loss is :  1.68556
    loss is :  1.66654
    loss is :  1.64975
    loss is :  1.63472
    loss is :  1.62112
    loss is :  1.6087
    loss is :  1.59725
    loss is :  1.58664
    loss is :  1.57676
    loss is :  1.56751
    loss is :  1.55882
    loss is :  1.55064
    loss is :  1.54291
    loss is :  1.53559
    loss is :  1.52865
    loss is :  1.52206
    loss is :  1.51578
    loss is :  1.50979
    loss is :  1.50408
    loss is :  1.49861
    .
    .
    .
    

    最终 l o s s loss loss会收敛,即使其 a c c u r a c y accuracy accuracy不能达到很高的水平,我们并不 c a r e care care这点,我们最终的目的是获取较好的 W 1 W1 W1 b 1 b1 b1,也就是 h i d d e n _ r e p e s e n t a t i o n hidden\_repesentation hidden_repesentation

    为什么是 o n e − h o t one-hot onehot

    这里写图片描述

    当我们用 o n e − h o t one-hot onehot向量乘以 W 1 W1 W1时,获取的是 W 1 W1 W1矩阵的某一行,所以 W 1 W1 W1扮演的是一个 l o o k   u p   t a b l e look\ up\ table look up table

    在我们这个代码例子中,可以看看 " q u e e n " "queen" "queen" W 1 W1 1中的 r e p e s e t a t i o n repesetation repesetation

    print(vectors[ word2int['queen'] ])
    # say here word2int['queen'] is 2
    -> 
    [-0.69424796 -1.67628145  3.07313657 -1.14802659 -1.2207377 ]
    

    给定一个向量,我们可以获取与其最近的向量

    def euclidean_dist(vec1, vec2):
        return np.sqrt(np.sum((vec1-vec2)**2))
    
    def find_closest(word_index, vectors):
        min_dist = 10000 # to act like positive infinity
        min_index = -1
        query_vector = vectors[word_index]
        for index, vector in enumerate(vectors):
            if euclidean_dist(vector, query_vector) < min_dist and not np.array_equal(vector, query_vector):
                min_dist = euclidean_dist(vector, query_vector)
                min_index = index
        return min_index
    

    我们来看看,与 " k i n g " 、 " q u e e n " 、 " r o y a l " "king"、"queen"、"royal" "king""queen""royal"最近的词:

    print(int2word[find_closest(word2int['king'], vectors)])
    print(int2word[find_closest(word2int['queen'], vectors)])
    print(int2word[find_closest(word2int['royal'], vectors)])
    ->
    queen
    king
    he
    

    进阶

    上面总结的主要是第一篇论文 E f f i c i e n t   E s t i m a t i o n   o f   W o r d   R e p r e s e n t a t i o n s   i n   V e c t o r   S p a c e Efficient\ Estimation\ of\ Word\ Representations\ in\ Vector\ Space Efficient Estimation of Word Representations in Vector Space内的内容,虽然只是一个三层的神经网络,但是在海量训练数据的情况下,需要极大的计算资源来支撑整个过程,举例来说,我们设定的 e m b e d d i n g _ s i z e = 300 embedding\_size=300 embedding_size=300时,而 v o c a b _ s i z e = 10 , 000 vocab\_size=10,000 vocab_size=10,000时,这时 W 1 W1 W1矩阵的维度就达到了 10 , 000 ∗ 300 = 3 m i l l i o n 10,000*300=3 million 10,000300=3million!!,这个时候再用 S G D SGD SGD来优化训练过程就显得十分缓慢,但是有时候你必须使用大量的数据来训练模型来避免过拟合。论文 D i s t r i b u t e d   R e p r e s e n t a t i o n s   o f   W o r d s   a n d   P h r a s e s   a n d   t h e i r   C o m p o s i t i o n a l i t y Distributed\ Representations\ of\ Words\ and\ Phrases\ and\ their\ Compositionality Distributed Representations of Words and Phrases and their Compositionality介绍了几种解决办法。

    • 采用下采样来降低训练样本数量
      t e n s o r f l o w tensorflow tensorflow里面实现的 w o r d 2 V e c word2Vec word2Vec v o c a b _ s z i e vocab\_szie vocab_szie并不是所有的 w o r d word word的数量,而且先统计了所有 w o r d word word的出现频次,然后选取出现频次最高的前 50000 50000 50000的词作为词袋。具体操作请看代码 tensorflow/examples/tutorials/word2vec/word2vec_basic.py,其余的词用 u n k unk unk代替。

    • 采用一种所谓的"负采样"的操作,这种操作每次可以让一个样本只更新权重矩阵中一小部分,减小训练过程中的计算压力。
      举例来说:一个 i n p u t   o u t p u t   p a i r input\ output\ pair input output pair 如: ( “ f o x ” , “ q u i c k ” ) (“fox”, “quick”) (fox,quick),由上面的分析可知,其 t r u e   l a b e l true\ label true label为一个 o n e − h o t one-hot onehot向量,并且该向量只是在 q u i c k quick quick的位置为1,其余的位置均为0,并且该向量的长度为 v o c a b   s i z e vocab\ size vocab size,由此每个样本都缓慢能更新权重矩阵,而"负采样"操作只是随机选择其余的部分 w o r d word word,使得其在 t r u e   l a b e l true\ label true label的位置为0,那么我们只更新对应位置的权重。例如我们如果选择负采样数量为5,则选取5个其余的 w o r d word word,使其对应的 o u t p u t output output为0,这个时候 o u t p u t output output只是6个神经元,本来我们一次需要更新 300 ∗ 10 , 000 300*10,000 30010,000参数,进行负采样操作以后只需要更新 300 ∗ 6 = 1800 300*6=1800 30061800个参数。

    • Hierarchical Softmax 是NLP中常用方法,详情可以查看Hierarchical Softmax 。其主要思想是以词频构建Huffman树,树的叶子节点为词表中的词,相应的高频词距离根结点更近。当需要计算生成某个词的概率时,不需要对所有词进行概率计算,而是选择在Huffman树中从根结点到该词所在结点的路径进行计算,得到生成该词的概率,时间复杂度从 O(N) 降低到 O(logN)(N个结点,则树的深度logN)

    个人总结

    • seq2seq模型,输入处都会乘以 e m b e d d i n g _ m a t r i x embedding\_matrix embedding_matrix,输出处都会乘以 e m b e d d i n g _ m a t r i x T embedding\_matrix^T embedding_matrixT,这两个embedding矩阵有时会共享,有时则不会。我认为 w o r d 2 V e c word2Vec word2Vec 其实就是 s e q 2 s e q seq2seq seq2seq 模型的原型,只不过应用到了不同的复杂场景中,根据场景需要,在内部加了 A t t e n t i o n Attention Attention 等机制,大致框架依然是 w o r d 2 V e c word2Vec word2Vec
    • w o r d 2 V e c word2Vec word2Vec 是当前自然语言处理领域的最基础知识,深刻理解 w o r d 2 v e c word2vec word2vec 原理非常重要。

    个人感觉 w o r d 2 V e c word2Vec word2Vec了解到这个程度差不多了。

    完整代码:

    import tensorflow as tf
    import numpy as np
    
    corpus_raw = 'He is the king . The king is royal . She is the royal  queen '
    
    # convert to lower case
    corpus_raw = corpus_raw.lower()
    
    words = []
    for word in corpus_raw.split():
        if word != '.': # because we don't want to treat . as a word
            words.append(word)
    
    words = set(words) # so that all duplicate words are removed
    word2int = {}
    int2word = {}
    vocab_size = len(words) # gives the total number of unique words
    
    for i,word in enumerate(words):
        word2int[word] = i
        int2word[i] = word
    
    # raw sentences is a list of sentences.
    raw_sentences = corpus_raw.split('.')
    sentences = []
    for sentence in raw_sentences:
        sentences.append(sentence.split())
    
    WINDOW_SIZE = 2
    
    data = []
    for sentence in sentences:
        for word_index, word in enumerate(sentence):
            for nb_word in sentence[max(word_index - WINDOW_SIZE, 0) : min(word_index + WINDOW_SIZE, len(sentence)) + 1] : 
                if nb_word != word:
                    data.append([word, nb_word])
    
    # function to convert numbers to one hot vectors
    def to_one_hot(data_point_index, vocab_size):
        temp = np.zeros(vocab_size)
        temp[data_point_index] = 1
        return temp
    
    x_train = [] # input word
    y_train = [] # output word
    
    for data_word in data:
        x_train.append(to_one_hot(word2int[ data_word[0] ], vocab_size))
        y_train.append(to_one_hot(word2int[ data_word[1] ], vocab_size))
    
    # convert them to numpy arrays
    x_train = np.asarray(x_train)
    y_train = np.asarray(y_train)
    
    # making placeholders for x_train and y_train
    x = tf.placeholder(tf.float32, shape=(None, vocab_size))
    y_label = tf.placeholder(tf.float32, shape=(None, vocab_size))
    
    EMBEDDING_DIM = 5 # you can choose your own number
    W1 = tf.Variable(tf.random_normal([vocab_size, EMBEDDING_DIM]))
    b1 = tf.Variable(tf.random_normal([EMBEDDING_DIM])) #bias
    hidden_representation = tf.add(tf.matmul(x,W1), b1)
    
    W2 = tf.Variable(tf.random_normal([EMBEDDING_DIM, vocab_size]))
    b2 = tf.Variable(tf.random_normal([vocab_size]))
    prediction = tf.nn.softmax(tf.add( tf.matmul(hidden_representation, W2), b2))
    
    
    sess = tf.Session()
    init = tf.global_variables_initializer()
    sess.run(init) #make sure you do this!
    
    # define the loss function:
    cross_entropy_loss = tf.reduce_mean(-tf.reduce_sum(y_label * tf.log(prediction), reduction_indices=[1]))
    
    # define the training step:
    train_step = tf.train.GradientDescentOptimizer(0.1).minimize(cross_entropy_loss)
    
    n_iters = 10000
    # train for n_iter iterations
    
    for _ in range(n_iters):
        sess.run(train_step, feed_dict={x: x_train, y_label: y_train})
        print('loss is : ', sess.run(cross_entropy_loss, feed_dict={x: x_train, y_label: y_train}))
    
    vectors = sess.run(W1 + b1)
    
    def euclidean_dist(vec1, vec2):
        return np.sqrt(np.sum((vec1-vec2)**2))
    
    def find_closest(word_index, vectors):
        min_dist = 10000 # to act like positive infinity
        min_index = -1
        query_vector = vectors[word_index]
        for index, vector in enumerate(vectors):
            if euclidean_dist(vector, query_vector) < min_dist and not np.array_equal(vector, query_vector):
                min_dist = euclidean_dist(vector, query_vector)
                min_index = index
        return min_index
    
    
    from sklearn.manifold import TSNE
    
    model = TSNE(n_components=2, random_state=0)
    np.set_printoptions(suppress=True)
    vectors = model.fit_transform(vectors) 
    
    from sklearn import preprocessing
    
    normalizer = preprocessing.Normalizer()
    vectors =  normalizer.fit_transform(vectors, 'l2')
    
    print(vectors)
    
    import matplotlib.pyplot as plt
    
    
    fig, ax = plt.subplots()
    print(words)
    for word in words:
        print(word, vectors[word2int[word]][1])
        ax.annotate(word, (vectors[word2int[word]][0],vectors[word2int[word]][1] ))
    plt.show()
    
    展开全文
  • 描述了数字家庭的发展,给出了研究现状,是篇不错的论文,为数字产业做出了贡献,别人发表的,用于分享
  • 论文分享,望支持

    2008-04-05 19:14:46
    学生管理系统的论文,挺好的,我也是从网上弄来的,给大家分享
  • 当当当,它来了 1992到2020全国大学生数学建模竞赛优秀论文免费分享,pdf版的呦,如果有帮助欢迎点赞收藏 https://pan.baidu.com/s/1R2R0HxK-UbziG0po8eK6AA 提取码:5pHR 国赛2019优秀论文 还有认证杯 ...

    想准备建模的你是不是和我一样到处找某年国赛优秀论文,网上很多要么是图片的,要么下载要币还不少,要不是某都文库之类的一点都不方便

    当当当,它来了 1992到2020全国大学生数学建模竞赛优秀论文免费分享,pdf版的呦,如果有帮助欢迎点赞收藏

    大学生建模论文

    https://pan.baidu.com/s/1R2R0HxK-UbziG0po8eK6AA 提取码:5pHR

    国赛2019优秀论文

     还有认证杯

     数学建模论文 - 中国大学生在线 (moe.gov.cn)当然官方也会放,不过不全

    参考博客:在这发现的宝藏2020数学建模国赛优秀论文发布 - 哔哩哔哩 (bilibili.com)

    研究生数学建模论文资料等

    感谢小伙伴整理的宝藏

    论文模板

    优秀论文 

     2004-2020年华为杯优秀论文

     还有常见算法等

    13163203690/MathModel: 研究生数学建模,本科生数学建模、数学建模竞赛优秀论文,数学建模算法,LaTeX论文模板,算法思维导图,参考书籍,Matlab软件教程,PPT (github.com)

    展开全文
  • 论文分享 |《DeepCluster》

    千次阅读 2018-07-27 09:38:22
    聚类(Cluster) 是一种经典的无监督学习方法,但是鲜有工作将其与深度学习结合。这篇文章提出了一种新的聚类方法DeepCluster,将端到端学习与聚类结合起来,同时学习网络的参数和对网络输出的特征进行聚类。...

    聚类(Cluster) 是一种经典的无监督学习方法,但是鲜有工作将其与深度学习结合。这篇文章提出了一种新的聚类方法DeepCluster,将端到端学习与聚类结合起来,同时学习网络的参数和对网络输出的特征进行聚类。作者将DeepCluster成功应用到大规模数据集和一些迁移任务上,性能超过了当前state of art的无监督工作。表明结合简单的聚类算法,无监督方式也可以学习到很好的特征。

    背景

    预训练的卷积模型在各类任务中都发挥了极大的作用,比如目标检测、语义分割,这些预训练模型提取了一些很好通用的特征,可以应用于不同的任务上。在这个过程中ImageNet起到了很好的助推,虽然ImageNet含有100万+的图片,但是在实际中这个数量还是很小的,并且ImageNet的多样性不够。如何去处理更大规模的无标签数据,需要一种有效无监督学习的方法。

    Method

    框架

    本文提出了一种将聚类与深度结合的方法,这种方法可以学习到一些有用的通用特征,这个框架如下图所示,整个过程包含对特征进行聚类,然后基于聚类的结果作为伪标签,更新网络的参数,让网络预测这些伪标签,这两个过程依次进行。这个过程看起来很简单,但能够取得比以往无监督方法更好的性能。

     

    用数学公式表达整个过程就是下面两个公式。第一个公式就是通过聚类产生伪标签,第二个公式是计算基于伪标签的损失值,然后更新网络参数。

     

    避免平凡解

    上述交替聚类和模型更新这种方式容易使网络找到一些取巧的方式,从而得到一些无意义的结果。

    Empty clusters

    具体来讲,使用模型来预测伪标签,可能使得网络产生的特征经过聚类都位于某个簇心周围,而使得其他簇心没有样本,这个问题是由于没有限制某个簇心不能没有样本。一个解决方法是限制每个簇心最少的样本数,这需要计算整个数据集,代价太高;另一种方式是当某个簇心为空时,随机选择一个非空的簇心,在其上加一些小的扰动作为新的簇心,同时让属于非空簇心的样本也属于新的簇心。

    Trivial parametrization

    另外一个问题是大量的数据被聚类到少量的几类上,一种极端场景是被聚类到一类上,这种情况下网络可能对于任意的输入都产生相同的输出。解决这个问题的方法是根据类别(或伪标签)对样本进行均匀采样。

    实现细节

    结构:AlexNet,使用BN代替LRN;VGG16+BN。
    训练数据:ImageNet;数据使用了一个基于Sobel的算子进行处理去除了颜色信息
    优化:聚类的时候使用center crop的样本特征,训练模型时使用数据增强(左右翻转、随机大小和长宽比的裁剪),其他训练都是常见的配置。另外聚类时使用了PCA降维到256维。

    实验

    Preliminary study

    实验部分首先来看随着训练过程的进行DeepCluster的一些变化。这里采用NMI(Normalized Mutual Information)来度量两个随机变量的相互依赖性。比如当两个随机变量完全独立,直到其中一个对推断另一个不提供任何信息,NMI值也为0。

    下面来看簇心与图片真实标签(Fig 2(a))的关系,从Fig 2(a)可以看出簇心与label之间的依赖程度随着训练过程越来越高,表明特征逐渐地包含了图片类别的信息。

    再来看第t-1epoch的簇心与第t epoch的簇心的关系(Fig 2(b)),从Fig 2(b)可以看出NMI在逐渐升高,表明簇心逐渐趋于稳定。但是最后NMI饱和值小于0.8,表明每个epoch都有一批样本在频繁的变换归属的簇心。

    最后看一下选择不同的K对精度的影响(Fig 2(c)).

    基于激活值的线性分类

    使用不同的卷积层特征训练一个线性分类器,在ImageNet 和 Places数据集上进行实验,结果在下表中。在ImageNet上,DeepCluster在conv2 - conv5层的性能都不同幅度的超过了其他方法。

    在数据集Pascal VOC 2007上实验

    将使用DeepCluster方法提取的特征应用到数据集Pascal VOC 2007上,比较了不同任务下的性能,包括图像分类,目标检测,语义分割,实验结果如下,可以看出DeepCluster在三个任务上都有不同程度的提升。

    讨论

    上面的实验都是基于ImageNet 和 AlexNet结构,下面来对比下使用不同数据集,不同结构下的结果。

    ImageNet versus YFCC100M

    ImageNet是一个面向目标的分类,它每个类别的分布相对均匀,DeepCluster对于这种情况是比较适应的,并且聚类的数量与ImageNet的类别数量相匹配。为了衡量这种数据分布的影响,从YFCC100M中随机选100万张图片来做预训练,基于hashtag的统计表明这批数据不均匀。基于ImageNet 和 YFCC 100M的预训练的特征用在不同的任务上的性能。可以看出DeepCluster对于数据分布是鲁棒的,能够得到一些较好的通用特征。

    AlexNet versus VGG

    在监督学习中,越深的网络往往有更好的性能,我们希望DeepCluster也有类似的效果。将在ImageNet训练得到的特征用于Pascal VOC 2007目标检测上,可以看出VGG-16 能够取得比AlexNet 更好的性能。

    总结

    本文提出了一种简单有效的无监督方法,这种无监督的预训练方法也能够学习很好的通用特征,使用这些特征在transfer task上的性能越来越接近监督学习的方式。

    参考文献:

    1. Caron, Mathilde, et al. "Deep Clustering for Unsupervised Learning of Visual Features." arXiv preprint arXiv:1807.05520 (2018).

     

    欢迎关注我们的微信公众号:geetest_jy

    展开全文
  • 此专栏包含的文章是笔者在实验室会议中分享过的,以加水印PPT的形式贴上来,会附上原文链接(部分会包含源码项目),感兴趣的读者可以自行更深入了解。 转载或作个人使用请标注出处,具有版权效力。 ...

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述




    附项目开源地址:
    https://github.com/facebookresearch/deepcluster

    论文地址:https://openaccess.thecvf.com/content_ECCV_2018/html/Mathilde_Caron_Deep_Clustering_for_ECCV_2018_paper.html

    笔者实验室研究的主要方向是血管图像分割,以及利用生理信号评价脑血流自动调节功能。此专栏包含的文章是笔者在实验室会议中分享过的,以加水印PPT的形式贴上来,会附上原文链接(部分会包含源码项目),感兴趣的读者可以自行更深入了解。 转载或作个人使用请标注出处,具有版权效力。

    展开全文
  • 农业病虫害-图像分类-论文分享PPT

    千次阅读 2020-03-29 14:37:06
    最近读的一篇论文,花了两个小时做的PPT,仅供大家参考。
  • 论文地址: 笔者实验室研究的主要方向是血管图像分割,以及利用生理信号评价脑血流自动调节功能。此专栏包含的文章是笔者在实验室会议中分享过的,以加水印PPT的形式贴上来,会附上原文链接(部分会包含源码项目)...
  • 本次要分享和总结的论文是GloVe:Global Vectors for Word RepresentationGloVe: Global\ Vectors\ for\ Word\ Representation,这是一篇介绍新的word Representationword\ Representation 方法,该方法现在...
  • 本次要分享论文是Adversarial&nbsp;Learning&nbsp;for&nbsp;Neural&nbsp;Dialogue&nbsp;GenerationAdversarial&nbsp;Learning&nbsp;for&nbsp;Neural&nbsp;Dialogue&nbsp;...
  • 为此,微软亚洲研究院将于 5月14号(下周四)9:00 至 18:00 举办微软亚洲研究院创研论坛 CVPR 2020 论文分享会。国内外计算机视觉领域的优秀代表们将携各自在 CVPR 2020 发表的最新研究,与大家交流分享。活动将...
  • 本文将总结分享ICLR2018论文 Deep Autoencoding Gaussian Mixture Model for Unsupervised Anomaly Detection,论文链接 DAGMM,参考的代码链接 CODE,本论文旨在将神经网络、EM与GMM有机结合起来,做无监督的异常...
  • 本次技术沙龙,我们将与大家分享无人配送团队今年在这些方向的最新成果。 出品人 毛一年 博士 | 美团无人机业务部负责人 负责美团无人机在城市低空物流配送方向的业务探索。2018年12月加入美团,此前是北京二郎神...
  • 本次技术沙龙,我们将与大家分享无人配送团队今年在这些方向的最新成果。 出品人 毛一年 博士 | 美团无人机业务部负责人 负责美团无人机在城市低空物流配送方向的业务探索。2018年12月加入美团,此前是北京二郎神...
  • ACL_2017深度学习前沿论文分享(2)

    千次阅读 2017-04-24 11:07:49
    昨天给大家分享了ACL_2017分享会的session1和session2部分。今天继续给大家带来本次分享会最后两个部分的内容,Session 3: Sentiment/Information Extraction和session4:Social Media/Word Segmentatin/...
  • 国际计算机视觉与模式识别会议(CVPR)是人工智能领域最有学术影响力的顶级会议之一。根据 CVPR 2021 官方公布的论文收录结果,今年一共有 1663 篇论文被接收,接收率为 23.7...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 84,062
精华内容 33,624
关键字:

论文分享