188asia.net

介绍

集中不等式,或概率界限,是机器学习算法或随机算法的分析是非常重要的工具。亚洲金博宝在统计学习理论,我们经常要证明随机变量,给出了一些假设,已经接近它的高概率的预期。本文提供的这些浓度措施的分析最基本的不平等的概述。

马尔可夫不等式

该米arkov’s inequality is one of the most basic bounds and it assumes almost nothing about the random variable. The assumptions that Markov’s inequality makes is that the random variable \(X\) is non-negative \(X > 0\) and has a finite expectation \(\mathbb{E}\left[X\right] < \infty\). The Markov’s inequality is given by:

$$ \ underbrace {P(X \ GEQ \阿尔法)} _ {\文本{的大于恒定} \阿尔法概率} \当量\ underbrace {\压裂{\ mathbb {E} \左[X \权利]}{\阿尔法}} _ {\文本{界以上由期望超过恒定} \阿尔法} $$

这意味着由恒定\(\阿尔法\)划分的概率随机变量\(X \)将由\(X \)的期望的限制。什么是显着的这个约束,是它拥有与正值任何分配,它不依赖于概率分布的任何功能,只需要一些薄弱的假设和它的第一时刻,期待。

Example:一家杂货店出售的平均每天40种啤酒(它的夏天!)。是什么,将出售80个或更多的啤酒明天的概率是多少?

$$
\ {开始}对齐
P(X \geq \alpha) & \leq\frac{\mathbb{E}\left[X\right]}{\alpha} \\\\
P(X \ GEQ 80)&\当量\压裂{40} {80} = 0.5 = 50 \%
\ {端对齐}
$$

马尔可夫不等式不依赖于随机变量的概率分布的任何财产,所以很明显,有两种使用更好的界限,如果有关概率分布的信息是可用的。

切比雪夫不等式

When we have information about the underlying distribution of a random variable, we can take advantage of properties of this distribution to know more about the concentration of this variable. Let’s take for example a normal distribution with mean \(\mu = 0\) and unit standard deviation \(\sigma = 1\) given by the probability density function (PDF) below:

$$ F(X)= \压裂{1} {\ SQRT {2 \ PI}}ë^ { - X ^ 2/2} $$

积分从-1到1:\(\ INT _ { - 1} ^ {1} \压裂{1} {\ SQRT {2 \ PI}}ë^ { - X ^ 2/2} \),我们知道,68数据的%是内\从平均值(1个\西格玛\)(一个标准偏差)\(\亩\)和95%是内\从平均值(2 \西格玛\)。但是,当它不是可以假定正态性,数据的任何其它量可被内\(1个\西格玛\)或\(2 \西格玛\)浓缩。

切比雪夫不等式提供了一种方式来获得一个绑定在任何分配的集中,而不承担除了有限的均值和方差的任何基本属性。切比雪夫也适用于任何随机变量,不仅对非负变量的马尔可夫不等式。

切比雪夫不等式是由以下关系式给出:

$$
P( \mid X – \mu \mid \geq k\sigma) \leq \frac{1}{k^2}
$$

这也可以被改写为:

$$
P(\中期X - \亩\中间$$

对于\(K = 2 \)的具体情况下,切比雪夫告诉我们,数据的至少75%集中在平均值的2个标准偏差。这适用于任何分配

现在,当我们比较这对结果\与正态分布的95%浓度(K = 2 \)\(2 \西格玛\),我们可以看到的是如何保守的切比雪夫的约束。然而,我们不能忘记,这适用于任何分配,而不是只为一个正态分布随机变量,和所有的切比雪夫的需求,是数据的第一和第二的时刻。一些需要注意的重要的是,在缺乏有关随机变量的详细信息,这不能得到改善。

切比雪夫不等式与大数定律弱

Chebyshev’s inequality can also be used to prove theweak law of large numbers,它说,在概率对真实均值样本均值收敛。

That can be done as follows:

  • 考虑独立同分布的序列(独立同分布)的随机变量\(X_1,X_2,X_3,\ ldots \),平均\(\亩\)和方差\(\西格马^ 2 \);
  • 样本均值是\(M_n = \压裂{X_1 + \ ldots + X_n} {N} \)和真实平均是\(\亩\);
  • 对于样品的期望意味着我们有:$$ \ mathbb {E} \左[M_n \右] = \压裂{\ mathbb {E} \左[X_1 \右] + \ ldots + \ mathbb {E} \左[X_n \右]} {N} = \压裂{N \亩} {N} = \亩$$
  • 对于样品的方差,我们有:$$瓦尔\左[M_n \右] = \压裂{VAR \左[X_1 \右] + \ ldots +无功\左[X_n \右]} {N ^ 2} =\压裂{N \西格玛^ 2} {N ^ 2} = \压裂{\西格马^ 2} {N} $$
  • 乙y the application of the Chebyshev’s inequality we have: $$ P(\mid M_n – \mu \mid \geq \epsilon) \leq \frac{\sigma^2}{n\epsilon^2}$$ for any (fixed) \(\epsilon > 0\), as \(n\) increases, the right side of the inequality goes to zero. Intuitively, this means that for a large \(n\) the concentration of the distribution of \(M_n\) will be around \(\mu\).

Improving on Markov’s and Chebyshev’s with Chernoff Bounds

之前进入的Chernoff边界,让我们来了解它背后的动机和一个如何改善切比雪夫的约束。要理解它,我们首先需要理解成对独立性和相互独立的区别。对于两两独立,我们有A,B和C的情况如下:

$$
P(A \帽B)= P(A)P(B)\\
P(A \cap C) = P(A)P(C) \\
P(B \帽C)= P(B)P(C)
$$

这意味着任何对(任何两个事件)是独立的,但不一定是:

$$
P(A \帽乙\帽C)= P(A)P(B)P(C)
$$

这被称为“相互独立”,这是一个更强的独立性。根据定义,相互独立承担两两独立,但相反的是并非总是如此。而这正是我们可以提高切比雪夫的约束,因为它是没有可能做这些进一步的假设(假设更强导致更强的边界)的情况下。

我们将谈论在本教程的第二部分中的切尔诺夫界!

引用本文为:基督教S. Perone,“集中不等式 - 第一部分,”在亚洲金博宝未知领域,23/08/2018,188asia.net

Privacy-preserving sentence semantic similarity using InferSent embeddings and secure two-party computation

隐私保护计算

隐私保护计算或安全计算是加密的子场,其中两个(两方或2PC)或多个(多方,或MPC)当事人可以没有关于当事人私人输入数据揭示信息一起评估功能彼此。这个问题和第一个解决方案,它在1982年由安德鲁姚明在了后来被称为“做了一个惊人的突破进行了介绍姚氏百万富翁问题“。

在姚明的百万富翁问题是两个百万富翁,Alice和Bob,谁有兴趣知道其中哪些是更丰富,但without revealing对方自己的实际财富。换句话说,他们想要的东西可以概括为:Alice和Bob希望共同计算功能安全,不知道什么比对输入数据计算的结果等(这仍然是私有它们)。

为了使问题具体,Alice有量的,如$ 10和Bob拥有量B,如$ 50,他们想知道的是哪一个是较大的,没有鲍勃揭示量B给Alice或翘透露出什么量的给Bob。这是要注意同样重要的是,我们也不想在第三方信任,否则问题将只是向可信方信息交换的一个简单的协议。

在形式上,我们要的是共同评估以下功能:

[R= f(A, B)

如私有值一个are held private to the sole owner of it and where the result[R将知道的只是一个或双方的。

It seems very counterintuitive that a problem like that could ever be solved, but for the surprise of many people, it is possible to solve it on some security requirements. Thanks to the recent developments in techniques such as FHE (全同态加密),不经意传输乱码电路,这样的问题开始变得现实生活中使用的实用,他们正在时下正在应用,如信息交换,安全的位置,广告,卫星轨道防撞等许多公司所采用

I’m not going to enter into details of these techniques, but if you’re interested in the intuition behind the OT (Oblivious Transfer), you should definitely read the amazing explanation done by Craig Gidneyhere。该[Re are also, of course, many different protocols for doing 2PC or MPC, where each one of them assumes some security requirements (semi-honest, malicious, etc), I’m not going to enter into the details to keep the post focused on the goal, but you should be aware of that.

问题:句子相似度

我们要实现什么是使用隐私保护的计算来计算句子之间的相似性,但不透露句子的内容。只是为了给一个具体的例子:鲍勃拥有一家公司,拥有许多不同的项目的句子,如描述:“此项目是为了建立深厚的学习情绪分析的框架,将用于鸣叫“爱丽丝谁拥有另一家竞争对手公司,拥有的也是类似的句子描述不同的项目。What they want to do is to jointly compute the similarity between projects in order to find if they should be doing partnership on a project or not, however, and this is the important point: Bob doesn’t want Alice to know the project descriptions and neither Alice wants Bob to be aware of their projects, they want to know the closest match between the different projects they run, butwithout disclosingthe project ideas (project descriptions).

句子相似度比较

Now, how can we exchange information about the Bob and Alice’s project sentences without disclosing information about the project descriptions ?

One naive way to do that would be to just compute the hashes of the sentences and then compare only the hashes to check if they match. However, this would assume that the descriptions are exactly the same, and besides that, if the entropy of the sentences is small (like small sentences), someone with reasonable computation power can try to recover the sentence.

对于这个问题的另一种方法(这是我们将要使用的方法),是句子中的句子的嵌入空间比较。我们只需要使用机器学习模型来创建句子的嵌入(我们将使用InferSentlater) and then compare the embeddings of the sentences. However, this approach also raises another concern: what if Bob or Alice trains a Seq2Seq model that would go from the embeddings of the other party back to an approximate description of the project ?

认为可以收回他们给出的嵌入句子的大致描述这不是没有道理的。这就是为什么我们将使用两方安全计算用于计算嵌入物的相似性,在某种程度上Alice和Bob将计算的嵌入的相似性没有透露他们的嵌入,保持他们的项目的想法是安全的。

整个流程如下图,其中Alice和Bob共享相同的机器学习模型,之后,他们利用这个模型,从句子的嵌入进去描述,随后在嵌入空间相似的安全计算。

整个过程的框图概览。

生成文章的嵌入与InferSent

碧LSTM MAX-汇集网络。来源:自然语言推测数据万能句子陈述的监督学习。亚历克西斯Conneau等。

InferSentis an NLP technique for universal sentence representation developed by Facebook that uses supervised training to produce high transferable representations.

他们使用了一种双向LSTM注意力,始终超越了许多无人监督的训练方法,如SkipThought载体。他们还提供了一个Pytorch实施我们将用它来生成句子的嵌入。

Note: even if you don’t have GPU, you can have reasonable performance doing embeddings for a few sentences.

该first step to generate the sentence embeddings is to download and load a pre-trained InferSent model:

import numpy as np import torch # Trained model from: https://github.com/facebookresearch/InferSent GLOVE_EMBS = '../dataset/GloVe/glove.840B.300d.txt' INFERSENT_MODEL = 'infersent.allnli.pickle' # Load trained InferSent model model = torch.load(INFERSENT_MODEL, map_location=lambda storage, loc: storage) model.set_glove_path(GLOVE_EMBS) model.build_vocab_k_words(K=100000)

现在,我们需要定义一个相似性度量来比较两个向量,并为实现这一目标,我会余弦相似性(188betcom网页版),因为它是非常简单的:

Cos(\pmb x, \pmb y) = \frac {\pmb x \cdot \pmb y}{||\pmb x|| \cdot ||\pmb y||}

一个s you can see, if we have two unit vectors (vectors with norm 1), the two terms in the equation denominator will be 1 and we will be able to remove the entire denominator of the equation, leaving only:

COS(\帽子{X},\帽子{Y})= \帽子{X} \ CDOT \帽子{Y}

所以,如果我们规范我们的向量有一个单位范(这就是为什么向量都穿着上面公式中的帽子),我们可以使余弦相似变成只是一个简单的点积的计算。这将有助于我们很多在计算类似距离后,当我们用一个框架来做到这一点的点产品的安全计算。

因此,下一步是定义,将采取一些句子文本,并将其转发给模型生成的嵌入,然后将它们归到单位向量函数:

#该功能将转发文成模型和#得到的嵌入。在此之后,它会#正常化到一个单位向量。DEF编码(模型,文本):嵌入= model.encode([文本])[0]嵌入/ = np.linalg.norm(嵌入)返回嵌入

一个s you can see, this function is pretty simple, it feeds the text into the model, and then it will divide the embedding vector by the embedding norm.

现在,对于实际的原因,我将在以后使用整数运算计算的相似性,但是,通过InferSent产生的嵌入当然真正的价值。出于这个原因,你会在下面的代码中看到,我们创建另一个函数scale the float values and remove the radix point将它们转换为整数。还有另一个重要的问题,我们将在以后使用安全计算框架doesn’t allow signed integers的,所以我们还需要在0.0和1.0之间剪辑的嵌入值。这当然会引起一些逼近误差,但是,我们仍然可以得到裁剪和缩放以有限的精度(我使用的是14位的过程中积计算比例,以避免溢出问题后)后很好的近似值:亚洲金博宝

# This function will scale the embedding in order to # remove the radix point. def scale(embedding): SCALE = 1 << 14 scale_embedding = np.clip(embedding, 0.0, 1.0) * SCALE return scale_embedding.astype(np.int32)

您可以在安全的计算使用浮点和有很多支持他们的框架,但是,它是更棘手的做到这一点,因为这个原因,我用整数运算来简化教程。上面的功能仅仅是一个黑客,使之简单。可以很容易地看到,我们可以收回这个以后没有嵌入的精度损失过多。

现在我们只需要创建一些句子的样品,我们将使用:

# The list of Alice sentences alice_sentences = [ 'my cat loves to walk over my keyboard', 'I like to pet my cat', ] # The list of Bob sentences bob_sentences = [ 'the cat is always walking over my keyboard', ]

并将其转换为嵌入物:

#爱丽丝句子alice_sentence1 =编码(型号,alice_sentences [0])= alice_sentence2编码(型号,alice_sentences [1])#鲍勃句bob_sentence1 =编码(型号,bob_sentences [0])

因为我们现在的句子,每个句子也被标准化,我们只要通过执行向量之间的点积计算亚洲金博宝余弦相似性:

>>> np.dot(bob_sentence1,alice_sentence1)0.8798542 >>> np.dot(bob_sentence1,alice_sentence2)0.62976325

正如我们所看到的,鲍勃的第一句是不是爱丽丝第二句(〜0.62)最相似(〜0.87)与爱丽丝第一句话。

因为我们现在的嵌入物,我们只是需要把它们转换成比例整数:

#缩放alice_sentence1_scaled爱丽丝句子的嵌入=规模(alice_sentence1)alice_sentence2_scaled =规模(alice_sentence2)#量表鲍勃句子的嵌入bob_sentence1_scaled =规模(bob_sentence1)#这是单位矢量嵌入用于句子>>> alice_sentence1阵列([0.01698913, -0.0014404,0.0010993,...,0.00252409,0.00828147,0.00466533],D型细胞= FLOAT32)#这是经缩放的矢量作为整数>>> alice_sentence1_scaled阵列([278,0,18,...,41,135,76],D型细胞= INT32)

现在,这些嵌入物的比例整数,我们就可以进入第二部分,我们会做双方的安全计算。

Two-party secure computation

为了执行双方(Alice和Bob)之间的安全计算,我们将使用ABY框架。一个乙Y implements many difference secure computation schemes and allows you to describe your computation as a circuit like pictured in the image below, where the Yao’s Millionaire’s problem is described:

姚明的百万富翁问题。从ABY资料为准(https://github.com/encryptogr金宝博游戏网址oup/ABY)。

一个s you can see, we have two inputs entering in one GT GATE (greater than gate) and then a output. This circuit has a bit length of 3 for each input and will compute if the Alice input is greater than (GT GATE) the Bob input. The computing parties then secret share their private data and then can use arithmetic sharing, boolean sharing, or Yao sharing to securely evaluate these gates.

ABY是很容易使用,因为你可以描述你的输入,股票,盖茨和它会做休息,你如创建套接字通信信道,在需要的时候进行数据交换等。然而,实施完全是用C ++编写,并I’m not aware of any Python bindings for it (a great contribution opportunity).

Fortunately, there is an implemented example for ABY that can do dot product calculation for us, theexample is here。我不会在这里复制的例子,但只有一部分,我们必须改变读取嵌入矢量,我们之前创建的,而不是随机生成vectors and increasing the bit length to 32-bits.

在那之后,我们只需要在两台不同的机器上执行的应用程序(或通过模拟本地像下面):

#这将执行的服务器部分,所述-r 0指定的角色(服务器)#和载体的-n 4096只限定了尺寸(InferSent生成#4096维的嵌入)。〜#./innerproduct -r 0 -n 4096#而另一个进程相同(或另一台机器,但是对于另一个#机执行,你必须明明指定IP)。〜#./innerproduct -r 1 -n 4096

而我们得到如下结果:

alice_sentence1的内积和alice_sentence2的bob_sentence1 = 226691917内产品和bob_sentence1 = 171746521

即使在整数表示,你可以看到爱丽丝的第一句的内积和鲍勃句话是高的,这意味着相似性也更高。但是,让我们现在转换这个值回浮动:

>>> SCALE = 1 << 14#这是点的产品,我们应该得到>>> np.dot(alice_sentence1,bob_sentence1)0.8798542#这是内部的产品,我们在安全计算>>> 226691917 / SCALE **了2.00.8444931#这是点的产品,我们应该得到>>> np.dot(alice_sentence2,bob_sentence1)0.6297632#这是内部的产品,我们在安全计算得到>>> 171746521 / SCALE ** 2.0 0.6398056

正如你所看到的,我们得到了很好的近似,即使在低亚洲金博宝精度数学和无符号整数需求的存在。Of course that in real-life you won’t have the two values and vectors, because they’re supposed to be hidden, but the changes to accommodate that are trivial, you just need to adjust ABY code to load only the vector of the party that it is executing it and using the correct IP addresses/port of the both parties.

我希望你喜欢它 !

– Christian S. Perone

引用本文为:基督教S. Perone,“隐私保护使用InferSent的嵌入和安全两方计算句子的语义相似性,”在亚洲金博宝未知领域,22/01/2018,//www.cpetem.com/2018/01/privacy-preserving-infersent/

在该区块新总理

GIMPS互联网梅森素数大搜索)已确认昨天新的已知的最大素数:277232917-1。这种新的已知的最大素有23249425个位数,是的,当然,一个梅森素数,素数在2形式表达ñ- 1,其中素性可以使用高效地计算卢卡斯 - 莱默素性测试。

一个关于这些最大素数的最常见问题是如何的位数来计算,考虑到这些数字的大小(23249425个位数为新已知的最大素)。而且确实有避免你评估的数目来计算的位数,使用Python你可以做一招:

>>>进口numpy的作为NP >>>一个= 2 >>> B = 77232917 >>> NUM_DIGITS = INT(1 + B * np.log10的(a))>>>打印(NUM_DIGITS)23249425

该[Reason why this works is that the log base 10 of a number is how many times this number should be divided by 10 to get to 1, so you get the number of digits after 1 and just need to add 1 back.

另一个有趣的事实是,我们还可以得到这个非常大的数字的最后一位数字同样没有通过一致性评价整个号码。亚洲金博宝由于我们感兴趣的是数mod 10而我们知道,梅森素数有2形式77232917-1,我们可以检查的权力2ñhave an easy cycling pattern:

2 ^ 1 \当量2 \ PMOD {10}
2 ^ 2 \当量4 \ PMOD {10}
2 ^ 3 \当量8 \ PMOD {10}
2 ^ 4 \当量6 \ PMOD {10}
2 ^ 5 \当量2 \ PMOD {10}
2 ^ 6 \当量4 \ PMOD {10}
(...重复)

Which means that powers of 2 mod 10 repeats at every 4 numbers, thus we just need to compute 77,232,917 mod 4, which is 1. Given that2 ^ {77232917} \当量2 ^ 1个\ PMOD {10}所述部分2a77232917ends in 2 and when you subtract 1 you end up with 1 as the last digit, as you can confirm by looking at the整个号码(〜10Mb的压缩文件)。

– Christian S. Perone

本福德定律 - 指数

Since本福德定律got some attention in the past years, I decided to make a list of the previous posts I made on the subject in the context of elections, fraud, corruption, universality and prime numbers:

Despesas德Custeioé雷德本福德(2014年6月 -在葡萄牙语

普遍性,素数和空间通信(2014年一月)

本福德定律的分析应用到Twitter金宝搏188官方(2009年8月)

本福德定律和伊朗大选(June 2009)

Prime Numbers and the Benford’s Law(米ay 2009)

Delicious.com,检查用户数对本福德定律(2009年4月)

本福德定律符合Python和苹果公司的股票价格(2009年4月)

我希望你喜欢它 !

– Christian S. Perone

深度学习 - 卷积神经网络,并与Python特征提取

Convolutional neural networks (orConvNets)的生物激发的MLP的变体,它们具有不同的种类的层,并且每个层不同工作比通常的MLP层不同。如果您有兴趣了解更多关于ConvNets,好的当然是CS231n – Convolutional Neural Newtorks for Visual Recognition。的细胞神经网络的体系结构示于下面的图片:

有规律的神经网络。
一个[Regular neural network (from CS231n website).
一个ConvNet网络achitecture(从CS231n网站)。
一个ConvNet网络achitecture(从CS231n网站)。

正如你所看到的,ConvNets可与三维体积和这些3D体积的转换。我不会在这个岗位重复整个CS231n教程,所以如果你真的有兴趣,请花时间,然后再继续阅读。

意大利千层面和nolearn

其中一个Python包深学习,我真的很喜欢工作,是千层面nolearn。千层面is based on Theano so the GPU speedups will really make a great difference, and their declarative approach for the neural networks creation are really helpful. The nolearn libary is a collection of utilities around neural networks packages (including Lasagne) that can help us a lot during the creation of the neural network architecture, inspection of the layers, etc.

我什么都在这个岗位展示,是如何建立一个简单的ConvNet架构与一些卷积和汇聚层。I’m also going to show how you can use a ConvNet to train a feature extractor and then use it to extract features before feeding them into different models like SVM, Logistic Regression, etc. Many people use pre-trained ConvNet models and then remove the last output layer to extract the features from ConvNets that were trained on ImageNet datasets. This is usually called transfer learning because you can use layers from other ConvNets as feature extractors for different problems, since the first layer filters of the ConvNets works as edge detectors, they can be used as general feature detectors for other problems.

加载MNIST数据集

MNIST数据集is one of the most traditional datasets for digits classification. We will use a pickled version of it for Python, but first, lets import the packages that we will need to use:

进口matplotlib进口matplotlib.pyplot作为PLT进口matplotlib.cm从进口的urllib进口urlretrieve cPickle的作为泡菜进口OS进口gzip的进口numpy的作为NP进口从lasagne.updates烤宽面条进口层theano进口烤宽面条厘米从nolearn.lasagne进口导入nesterov_momentum NeuralNet从sklearn.metrics nolearn.lasagne进口形象化导入classification_report从sklearn.metrics进口confusion_matrix

正如你所看到的,我们正在绘制一些图像导入matplotlib,一些原生的Python模块下载MNIST数据集,numpy的,theano,烤宽面条,nolearn和模型评估一些scikit学习功能。

在那之后,我们定义MNIST加载函数(这是相当的意大利千层面教程中使用的相同的功能):

def load_dataset(): url = 'http://deeplearning.net/data/mnist/mnist.pkl.gz' filename = 'mnist.pkl.gz' if not os.path.exists(filename): print("Downloading MNIST dataset...") urlretrieve(url, filename) with gzip.open(filename, 'rb') as f: data = pickle.load(f) X_train, y_train = data[0] X_val, y_val = data[1] X_test, y_test = data[2] X_train = X_train.reshape((-1, 1, 28, 28)) X_val = X_val.reshape((-1, 1, 28, 28)) X_test = X_test.reshape((-1, 1, 28, 28)) y_train = y_train.astype(np.uint8) y_val = y_val.astype(np.uint8) y_test = y_test.astype(np.uint8) return X_train, y_train, X_val, y_val, X_test, y_test

一个s you can see, we are downloading the MNIST pickled dataset and then unpacking it into the three different datasets: train, validation and test. After that we reshape the image contents to prepare them to input into the Lasagne input layer later and we also convert the numpy array types to uint8 due to the GPU/theano datatype restrictions.

在那之后,我们已经准备好装载MNIST数据集并检查:

X_train, y_train, X_val, y_val, X_test, y_test = load_dataset() plt.imshow(X_train[0][0], cmap=cm.binary)

此代码以上将输出以下图像(我使用IPython的笔记本):

一个数字MNIST(5中的情况下)的一个例子。
一个数字MNIST(5中的情况下)的一个例子。

ConvNet架构和培训

现在,我们可以定义我们ConvNet架构,然后用GPU / CPU(我有一个非常便宜的GPU,但是它有很大帮助)训练它:亚洲金博宝

NET1 = NeuralNet(层= [( '输入',layers.InputLayer),( 'conv2d1',layers.Conv2DLayer),( 'maxpool1',layers.MaxPool2DLayer),( 'conv2d2',layers.Conv2DLayer),('maxpool2”,layers.MaxPool2DLayer),( 'dropout1',layers.DropoutLayer),( '密',layers.DenseLayer),( 'dropout2',layers.DropoutLayer),( '输出',layers.DenseLayer)],#输入层input_shape =(无,1,28,28),#层conv2d1 conv2d1_num_filters = 32,conv2d1_filter_size =(5,5),conv2d1_nonlinearity = lasagne.nonlinearities.rectify,conv2d1_W = lasagne.init.GlorotUniform(),#层maxpool1maxpool1_pool_size =(2,2),#层conv2d2 conv2d2_num_filters = 32,conv2d2_filter_size =(5,5),conv2d2_nonlinearity = lasagne.nonlinearities.rectify,#层maxpool2 maxpool2_pool_size =(2,2),#dropout1 dropout1_p = 0.5,#密dense_num_units = 256,dense_nonlinearity = lasagne.nonlinearities.rectify,#dropout2 dropout2_p = 0.5,#输出output_nonlinearity = lasagne.nonlinearities.softmax,output_num_units = 10,#优化方法PARAMS更新=未列名terov_momentum,update_learning_rate = 0.01,update_momentum = 0.9,max_epochs = 10,详细= 1,)#列车网络NN = net1.fit(X_train,y_train)

一个s you can see, in the parameter我们定义与该层的名称/类型的元组的字典,然后我们定义为这些层的参数。我们在这里的结构是利用两个卷积层用poolings然后完全连接层(致密层)和输出层。也有一些层之间遗失,漏失层为正则该随机设定的输入值为零,以避免过度拟合(见下面的图)。

漏失层效果(从CS231n网站)。
漏失层效果(从CS231n网站)。

一个fter calling the培养法,nolearn包会显示我的卑微的GPU我得到下面的结果学习过程中的地位,在我的机器:

#神经网络160362个可学习参数##层信息#名称大小--- -------- -------- 0输入1x28x28 1 conv2d1 32x24x24 2 maxpool1 32x12x12 3 conv2d2 32x8x8 4 maxpool2 32x4x4 5 dropout132x4x4 6密256 7 dropout2 256 8输出10划时代列车损失有效损失火车/ VAL有效ACC DUR ------- ------------ -----------  ----------- --------- --- 1 0.85204 0.16707 5.09977 0.95174 33.71s 2 0.27571 0.10732 2.56896 0.96825 3 33.34s 0.20262 0.08567 2.36524 0.97488 33.51s 4 0.16551 0.07695 2.150810.97705 33.50s 5 0.14173 0.06803 2.08322 0.98061 34.38s 6 0.12519 0.06067 2.06352 0.98239 34.02s 7 0.11077 0.05532 2.00254 0.98427 33.78s 8 0.10497 0.05771 1.81898 0.98248 34.17s 9 0.09881 0.05159 1.91509 0.98407 10 33.80s 0.09264 0.04958 1.86864 0.98526 33.40s

正如你所看到的,到底准确度为0.98526,一个相当不错的表现,适合于10个时期的培训。

预测和混淆矩阵

Now we can use the model to predict the entire testing dataset:

preds = net1.predict(X_test)

一个ñd we can also plot a confusion matrix to check the performance of the neural network classification:

厘米= confusion_matrix(y_test,preds)plt.matshow(厘米)plt.title( '混淆矩阵')plt.colorbar()plt.ylabel( '真标签')plt.xlabel( '预测标签')plt.show()

上面的代码将绘制以下混淆矩阵:

混淆矩阵
混淆矩阵

正如你所看到的,对角线,其中分类更加密集,显示我们分类的良好性能。

过滤器的可视化

We can also visualize the 32 filters from the first convolutional layer:

visualize.plot_conv_weights(net1.layers _ [ 'conv2d1'])

上面的代码将绘制下面以下过滤器:

该first layer 5x5x32 filters.
该first layer 5x5x32 filters.

一个s you can see, the nolearnplot_conv_weights地块所有过滤器呈现我们指定的层。

Theano层的功能和特征提取

Now it is time to create theano-compiled functions that will feed-forward the input data into the architecture up to the layer you’re interested. I’m going to get the functions for the output layer and also for the dense layer before the output layer:

dense_layer = layers.get_output(net1.layers _ [ '密'],确定性=真)output_layer = layers.get_output(net1.layers _ [ '输出'],确定性=真)input_var = net1.layers _ [ '输入']。input_varf_output = theano.function([input_var],output_layer)f_dense = theano.function([input_var],dense_layer)

正如你可以看到,我们有一个叫做现在二人theano功能f_outputf_dense(for the output and dense layers). Please note that in order to get the layers here we are using a extra parameter called “deterministic“, this is to avoid the dropout layers affecting our feed-forward pass.

现在,我们可以示例实例转换到输入格式,然后将其馈送到用于输出层theano功能:

instance = X_test[0][None, :, :] %timeit -n 500 f_output(instance) 500 loops, best of 3: 858 µs per loop

正如你所看到的,f_output功能需要的858微秒的平均水平。我们也可以绘制实例的输出层激活:

pred = f_output(instance) N = pred.shape[1] plt.bar(range(N), pred.ravel())

上面的代码将创建以下情节:

Output layer activations.
Output layer activations.

一个s you can see, the digit was recognized as the digit 7. The fact that you can create theano functions for any layer of the network is very useful because you can create a function (like we did before) to get the activations for the dense layer (the one before the output layer) and you can use these activations as features and use your neural network not as classifier but as a feature extractor. Let’s plot now the 256 unit activations for the dense layer:

PRED = f_dense(实例)N = pred.shape [1] plt.bar(范围(N),pred.ravel())

上面的代码将创建下面的情节如下:

致密层激活。
致密层激活。

现在,您可以使用这些256个激活的输出功能,像Logistic回归或SVM线性分类。

I hope you enjoyed the tutorial !

引用本文为:基督教S. Perone,“深度学习 - 卷积神经网络,并与Python特征提取”,在亚洲金博宝未知领域,19/08/2015,//www.cpetem.com/2015/08/convolutional-neural-networks-and-feature-extraction-with-python/

谷歌的S2,上球体,细胞和希尔伯特曲线几何

更新 - 2017年12月5日:谷歌刚刚宣布,将致力于为客户的S2库,惊人的消息的发布新版本的开发,储存库可以发现here

谷歌的S2库是真正的宝贝,不仅是因为它的功能对空间索引,还因为它是在4年多前发布的,并没有得到应有的重视图书馆。在S2库是由谷歌本身的谷歌地图,MongoDB的发动机也被使用Foursquare的,但你不会找到除了通过四方,一纸库中的任何地方的任何文件或物品Google presentation和the source code comments. You’ll also struggle to find bindings for the library, the official repository has missing Swig files for the Python library and thanks tosome forks我们可以有一个部分结合Python语言(我将用它为这个职位)。我听说,谷歌正在积极库现在,我们可能很快会得到有关它的更多细节时,他们发表本作品,但我决定,为什么我觉得这个库是分享关于图书馆的原因一些例子非常酷。

一直到细胞

你会看到这个“细胞”的概念各地S2代码。这些细胞球体的层次分解(在地球上我们的情况,但你并不仅限于此),成区域或点的简洁表示。地区也可使用这些相同的细胞,有一些很好的功能近似:

  • 它们结构紧凑(由64位整数表示)
  • 他们有地域特色解析
  • 他们是分层次的(大公有水平,以及类似的水平也有类似的地方)
  • 该Containment query for arbitrary regions are really fast

该S2 library starts by projecting the points/regions of the sphere into a cube, and each face of the cube has a quad-tree where the sphere point is projected into. After that, some transformation occurs (for more details on why, see theGoogle presentation)和空间离散,使得细胞在一个列举的后Hilbert Curve,和this is why this library is so nice, the Hilbert curve is a space-filling curve that converts multiple dimensions into one dimension that has an special spatial feature: it preserves the locality.

Hilbert Curve

Hilbert Curve

希尔伯特曲线是空间填充曲线,这意味着它的范围覆盖了整个ñ维空间。要了解如何工作的,你可以想像,布置在空间中,以使绳穿过空间的每平方,从而填补了整个空间,一种特殊的方式长长的一串。要转换一起希尔伯特曲线2D点,你只需要选择在哪里点位于字符串的位置。一个简单的方法去理解它是使用this iterative example在这里您可以点击曲线的任何一点,它会显示在字符串中的点位于反之亦然。

In the image below, the point in the very beggining of the Hilbert curve (the string) is located also in the very beginning along curve (the curve is represented by a long string in the bottom of the image):

Hilbert Curve
Hilbert Curve

Now in the image below where we have more points, it is easy to see how the Hilbert curve is preserving the spatial locality. You can note that points closer to each other in the curve (in the 1D representation, the line in the bottom) are also closer in the 2D dimensional space (in the x,y plane). However, note that the opposite isn’t quite true because you can have 2D points that are close to each other in the x,y plane that aren’t close in the Hilbert curve.

Hilbert Curve
Hilbert Curve

由于S2使用希尔伯特曲线枚举细胞,这意味着单元值接近的值也是在空间上彼此接近。当这一想法与层次分解组合,你有一个非常快速的框架,用于索引和查询操作。亚洲金博宝在我们开始与实例之实践,让我们看到了细胞是如何在64位整数表示。

If you are interested in Hilbert Curves, I really recommendthis article,这是非常直观的亚洲金博宝,并显示曲线的一些性质。

该单元表达

正如我已经提到的,该细胞具有不同的层次,不同的区域,他们可以覆盖。在S2库中,你会发现的层次化分解30级。细胞水平和区域范围内,它们可以覆盖在幻灯片说我下面再现谷歌演示所示:

细胞区
细胞区

一个s you can see, a very cool result of the S2 geometry is that every cm² of the earth can be represented using a 64-bit integer.

将细胞使用下面的架构表示:

单元表达模式
单元表达模式(images from the original Google presentation)

第一个是表示叶单元,与通常用来表示点的最小区域的小区。正如可以看到,3个初始比特被保留用于存储其中球体的点被投影的立方体的面,则随后在希尔伯特曲线总是跟随一个“1”位,该单元的位置是将识别单元的电平的标记。

因此,检查电池的水平,所需要的所有是检查其中最后一个“1”位位于单元表达。遏制的检查,以验证是否细胞包含在另一个小区,你只需要做的是做一个前缀比较。这些操作是非常快,他们是可能仅仅是由于Hilbert曲线枚举和使用的层次分解方法。

覆盖地区

所以,如果你想生成细胞覆盖的区域,可以使用该库的方法,其中指定的细胞的最大数量,要使用的最大细胞水平和最小细胞水平,那么算法将接近这个使用指定的参数的区域。在下面的例子中,我使用的S2库提取一些机器学习二元特征使用水平15细胞:

细胞以15级 - 二元特征的机器学习
细胞以15级 - 二元特征的机器学习

细胞区域,上面用透明的多边形超过我的城市感兴趣的整个区域的图像在这里表示。因为我既用于最低和最高级别的15级,细胞都覆盖区域类似的区域。如果更改的最低水平到8(因此允许使用较大的细胞的可能性),则算法将在某种程度上接近的区域,这将提供细胞的较小的数量,并且还试图保持近似精确像在下面的例子:

使用从8到15(水平)范围覆盖
使用从8到15(水平)范围覆盖

正如你所看到的,我们现在有使用更大的细胞中心,以应付边框覆盖,我们有使用更小的细胞近似(also note the quad-trees)。

例子

*在本教程中我使用了Python从2.7绑定以下资料库。该指令编译和安装它存在于仓库的自述,所以我就不在这里重复了。

到纬度/经度点转换到单元表示所述第一步骤被示出如下:

>>>进口S2 >>>经纬度= s2.S2LatLng.FromDegrees(-30.043800,-51.140220)>>>细胞= s2.S2CellId.FromLatLng(经纬度)>>> cell.level()30 >>> cell.id()10743750136202470315 >>> cell.ToToken()951977d377e723ab

正如你所看到的,我们首先创建一个类的对象S2LatLng代表纬度/经度点,然后我们将其送到S2CellId类构建单元表达。在此之后,我们可以得到类的水平和id。还有一种方法叫ToToken该整数表示转换为紧凑的字母数字表示你以后可以使用它解析FromToken方法。

You can also get the parent cell of that cell (one level above it) and use containment methods to check if a cell is contained by another cell:

>>> parent = cell.parent() >>> print parent.level() 29 >>> parent.id() 10743750136202470316 >>> parent.ToToken() 951977d377e723ac >>> cell.contains(parent) False >>> parent.contains(cell) True

正如你所看到的,家长的水平是一个孩子的细胞上面(在我们的情况下,叶细胞)。该ID还除了电池和安全壳检查级别非亚洲金博宝常相似的是非常快(它只是检查母细胞的子单元的范围)。

这些细胞可以被存储在数据库中,他们将在B树索引执行得非常好。为了创建细胞的集合,将覆盖的区域,可以使用S2RegionCoverer类等在下面的例子:

>>> region_rect = S2LatLngRect(S2LatLng.FromDegrees(-51.264871,-30.241701),S2LatLng.FromDegrees(-51.04618,-30.000003))>>>防尘罩= S2RegionCoverer()>>> coverer.set_min_level(8)>>>防尘罩.set_max_level(15)>>> coverer.set_max_cells(500)>>>覆盖= coverer.GetCovering(region_rect)

首先,我们定义了一个S2LatLngRect这是界定我们想要覆盖该区域的矩形。还有一些其他类,您可以使用(构建多边形为例)时,S2RegionCoverer与使用类作品S2Region类作为基类。定义的矩形后,我们实例S2RegionCoverer和then set the aforementioned min/max levels and the max number of the cells that we want the approximation to generate.

如果你想绘制覆盖,你可以使用Cartopy,身材匀称和matplotlib,就像下面的例子:

进口matplotlib.pyplot从S2进口* PLT从shapely.geometry进口多边形进口cartopy.crs作为CCRS导入cartopy.io.img_tiles作为cimgt PROJ = cimgt.MapQuestOSM()plt.figure(figsize =(20,20),DPI= 200)AX = plt.axes(投影= proj.crs)ax.add_image(PROJ,12)ax.set_extent([ -  51.411886,-50.922470,-30.301314,-29.94364])region_rect = S2LatLngRect(S2LatLng.FromDegrees( -51.264871,-30.241701),S2LatLng.FromDegrees(-51.04618,-30.000003))防尘罩= S2RegionCoverer()coverer.set_min_level(8)coverer.set_max_level(15)coverer.set_max_cells(500)覆盖= coverer.GetCovering(region_rect)geoms =[用于在覆盖CELLID:new_cell = S2Cell(CELLID)顶点= []为i的x范围(0,4):顶点= new_cell.GetVertex(ⅰ)经纬度= S2LatLng(顶点)vertices.append((latlng.lat().degrees(),latlng.lng()度()))=地理多边形(的顶点)geoms.append(GEO)打印 “总几何:{}”。格式(LEN(geoms))ax.add_geometries(geoms,ccrs.PlateCarree(),facecolor = '珊瑚',edgecolor = '黑',人PHA = 0.4)plt.show()

其结果将是下一个:

覆盖细胞。
覆盖细胞。

有很多东西在S2 API,我真实的ly recommend you to explore and read the source-code, it is really helpful. The S2 cells can be used for indexing and in key-value databases, it can be used on B Trees with really good efficiency and also even for Machine Learning purposes (which is my case), anyway, it is a very useful tool that you should keep in your toolbox. I hope you enjoyed this little tutorial !

– Christian S. Perone

引用本文为:基督教S. Perone,“谷歌的S2,上球体,细胞和希尔伯特曲线的几何形状,”在亚洲金博宝未知领域,14/08/2015,//www.cpetem.com/2015/08/googles-s2-geometry-on-the-sphere-cells-and-hilbert-curve/

普遍性,素数和空间通信

因此,在数学我们的理念普遍性in which we have laws like the大数定律中,本福德定律(我引用了很多以前的帖子),该Central limit theorem和许多其他法律行为像数学世界的物理定律。这些法律不是我们的发明,我的意思是,这些概念都是我们的发明但法律per seare universal, they are true no matter where you are on the earth or if you live far away on the universe. And that is why弗兰克·德雷克,SETI的创始人之一,也是在搜寻地外文明计划的先驱之一来使用素数(普遍性的另一个例子)与遥远的世界进行沟通这一高招。弗兰克·德雷克有了想法是使用素数隐藏(实际上没有躲,而是使不言而喻的,你会明白以后)发送的图像尺寸的图像尺寸本身。

因此,假设您收到一条消息,是划线和点的序列,例如“-.-。-。-.--- ...... -.-”是重复一个短暂的停顿之后,然后一遍又一遍。让我们假设这个消息具有1679个符号的大小。所以,你开始进行号码分析,这实际上是一个半素数(在密码系统中使用的相同,一个数字,是两个素数的乘积),其可以在素因子作为被分解23*73= 1679,这是它的因素在黄金的因素(实际上所有的数字都只有一个单一的集合,是唯一的质因子的唯一方法,请参阅算术基本定理)。So, since there are only two prime factors, you will try to reshape the signal in a 2D image and this image can have the dimension of 23×73 or 73×23, when you arrange the image in one of these dimensions you’ll see that the image makes sense and the other will be just a random and strange sequence. By using prime numbers (or semiprimes) you just used the total image size to define the only two possible ways of arranging the image dimension.

阿雷西博射电望远镜

这个想法是由现实中实际使用的1974年一个[Recibo radio telescope当一个message was broadcast在频率调制(FM)针对25.000光年的M13球状星团:

米13 Globular Star Cluster

该消息具有1679个二进制数字的大小(惊奇)和进行了大量的你的世界等的信息:一个人的图形表示,数字1至10,阿雷西博无线电望远镜等的图形表示

该message decoded as 23 rows and 73 columns is this:

一个[Recibo Message Shifted (Source: Wikipedia)

正如你所看到的,消息看起来很多无意义的,但是当它与73行和23列解码为图像,它会显示其真正的意义:

一个[Recibo Message with the correct dimension (Source: Wikipedia)

惊人的,你不觉得吗?我希望你喜欢它 !

– Christian S. Perone

本文引用:基督教腓骨,”大学sality, primes and space communication," in亚洲金博宝未知领域,2014年9月1日,//www.cpetem.com/2014/01/universality-primes-and-space-communication/

优化坏好消息

新发表的论文名为“决定四次多项式和相关问题的凸性的NP-硬度”带来光(或暗度)到是否确实存在一个多项式时间算法,可以决定是否多元多项式是全局凸涉及到20岁的问题。答案是不。

凸与非凸函数
Convex (top) vs Non Convex (bottom) Functions (Source: MIT News)

从新闻的文章:

对于复杂的功能,发现全球最小可以很辛苦。亚洲金博宝但它是一个容易得多,如果你事先知道该函数是凸知道,这意味着功能斜坡曲线处处向着最低。亚洲金博宝凸是这样一个有用的特性,在1992年,关于优化的一个重要会议选择在该领域的七个最重要的悬而未决的问题,其中之一是,是否一个任意多项式函数的凸性,可以有效地确定。

近20年后,研究人员在麻省理工学院的实验室信息和决策系统终于回答了这个问题。遗憾的是,答案,这是他们在五月报道with one paper在社会为工业和优化应用数学(SIAM)会议,是否定的。对于任意多项式函数 - 也就是,在该变量被升高到积分指数的函数,诸如化合物13x4+ 7xy2+ yz — determining whether it’s convex is what’s calledNP难。这意味着,在世界上最强大的计算机无法提供在合理时间内答复。

在同一个会议,但是,电气工程MIT教授和计算机科学巴勃罗Parrilo和他的研究生阿米尔·阿里·艾哈迈迪,两人的第一篇论文四个作者,发现在许多情况下,可以有效地确定的属性,被称为平方和凸性,是一种可行的替代凸性。米oreover, they provide an algorithm for determining whether an arbitrary function has that property.

Read the full news文章在这里, 或者这里纸