Regularization in DL

正则化

模型越复杂越容易出现过拟合状态,所以需要一种机制来保证我们模型的“简单”,这样我们的模型才能有较好的泛化能力,正则化是这类机制之一。

欧几里得范数:$||w||_2^2 = \sum_{j=1}^{n_x}w_j^2 = w^Tw$

L2范数:$J(w,b) = \frac{1}{m} *L(y, \hat{y}) + \frac{\lambda}{2m}||w||_2^2$

L1范数:$\frac{\lambda}{2m} \sum_{j=1}^{u_x}|w_j|=\frac{\lambda}{2m}||w||_1$

paste image

Read More


SparkSQL

启动Spark Shell:

1
lisongqian@master:/opt/spark$ ./bin/spark-shell

操作DataFrames

在Spark Shell启动时,会输出Spark context available as 'sc',这意味着spark-shell已经初始化了一个可用的spark context叫做sc.

JSON:

1
2
3
{"name":"Michael"}
{"name":"Andy", "age":30}
{"name":"Justin", "age":19}

导入数据源

1
2
3
scala> val sqlContext = new org.apache.spark.sql.SQLContext(sc)
scala> import sqlContext.implicits._
scala> val df = sqlContext.read.json("file:///opt/spark/examples/src/main/resources/people.json")

输出数据源

1
2
3
4
5
scala> df.show() // 输出数据源内容
scala> df.select("name").show() // 只显示 "name" 列
scala> df.select(df("name"), df("age") + 1).show() // 将 "age" 加 1
scala> df.filter(df("age") > 21).show() # 条件语句
scala> df.groupBy("age").count().show() // groupBy 操作

SQL语句操作

1
2
3
scala> df.registerTempTable("people")     // 将 DataFrame 注册为临时表 people
scala> val result = sqlContext.sql("SELECT name, age FROM people WHERE age >= 13 AND age <= 19") // 执行 SQL 查询
scala> result.show()

Probabilistic Grammar in Natural Language Processing

Context-Free Grammar

上下文无关语法,简称CFG,G定义为四元组

  • $N$ 是非终极符号的集合
  • $\sum$ 是终极符号的集合
  • $S$ 是初始符号
  • $P$ 是重写规则

规则的形式为:$A\to \beta$ ,$A$为单独的非终极符号,$\beta$ 是符号串,它可以由终极符号,非终极符号,终极符号和非终极符号混合组成。

解析方法

  • CYK算法 自底向上的算法,这里的自底向上意思是从单词开始,朝向 S(句子)工作。

  • Earley算法

Read More


Spark-kNN

pom.xml配置:

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
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>cn.lisongqian</groupId>
<artifactId>knn</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.scala-lang/scala-library -->
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-library</artifactId>
<version>2.12.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.spark/spark-core -->
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>2.1.0</version>
</dependency>

</dependencies>

</project>

Read More


The Base of Deep Learning

神经网络和深度学习

Logistic Regression(logistic回归)

Given x, want $\hat{y} =P(y=1|x) $ $x \in \mathbb{R}^{n_x}$

Parameter: $w\in \mathbb{R^{n_x}},b\in \mathbb{R}$

Output: $\hat{y} = \sigma(w^Tx+b)$

注:$\sigma$函数的作用请看激励函数.

损失函数

适用于单个训练成本

  • But you end up with optimization problem with multiple local optima.(得到多个局部最优解,无法通过梯度下降方法获取正确的最优解)
  • IF y=1 :$\ell(\hat{y}, y) = -\log \hat{y} $ 为了使$\ell(\hat{y}, y) $减小,$\hat{y}$需增大
  • IF y=0:$\ell(\hat{y}, y) = -\log (1-\hat{y})$,为了使$\ell(\hat{y}, y) $减小,$\hat{y}$需减小

成本函数

paste image

适用于基于参数的总成本,要找到合适的参数w和b来使J最小

gradient descent(梯度下降法)

从初始点开始,朝最陡的下坡方向走一步

paste image

Repeat{
$w := w - \alpha\frac{\partial J(w,b)}{\partial w}$

​ $b := b - \alpha\frac{\partial J(w,b)}{\partial w}$

}

Read More


Fake news analysis based on kg

基于Naïve Bayes和TF-IDF的真假新闻分类

用途:通过词包来对新闻的真假进行预测

去停用词

人类语言中包含的功能词,这些功能词极其普遍(’the’、’is’、’at’、’which’、’on’)—提高搜索性能

词频$tf_{ij}$

逆向文件频率$idf_i$

$idf_i=log\frac{|D|}{1+|\{d\in D: t\in d\}|}$ => $log\frac{文件总数}{包含该词语的文件数目+1}$

计算TF与IDF的乘积作为权重$tfidf_i$

通过计算得到包含词语权重的向量(指向该分类的词语带权向量)

计算概率(基于贝叶斯公式)

对每一篇训练集的相同词权重进行累加,条件概率=$该词条数目总词条数目\frac{该词条数目}{总词条数目}$,得出每个类别每个词条的概率向量

预测真假新闻

输入新闻,计算结果(可能是乘积,可能是条件概率),将向量对应位置相乘,求和,比较在两种词包的条件下谁的概率大。

Read More