This commit is contained in:
Estom
2021-05-24 13:43:50 +08:00
parent 7a060af4e3
commit c172bacb07
12 changed files with 233 additions and 57 deletions

57
Go/Go基础/1 概述.md Normal file
View File

@@ -0,0 +1,57 @@
# 概述
## 1 背景
### 产生原因
Go是Google开发的一种静态、强类型、编译型、并发型并具有垃圾回收功能的类C编程语言。2009以开源项目的形式发布2012年发布1.0稳定版本,距今已经十年了。
Go语言之父Pike提到Go语言是以C为原型以C++为目标而设计的。因为他觉得C++忒复杂了,要解救程序员于水火。
核心设计师Pike和Ken都是出身自贝尔实验室Ken之于Pike亦师亦友共同发明了UTF-8还共同结对编程过感情好的像穿一条裤子。
Pike是Unix先驱贝尔实验室最早跟Ken、Dennis一起开发Unix的猛人Plan9 OS的灵魂人物。大胡子Ken爷爷则是Unix之父和Dennis一起发明了C语言殿堂骨灰级程序员早已是名满天下。
### 设计哲学
C++语法自由自在于是乎一群大佬为tab or space、大括号要不要换行等诸如此类的格式问题吵得不可开交。Go设计师认为都是吃饱了撑的。
Go编译器内建工具gofmt强制源码格式化。对不起没有选项我的地盘听我的把精力focus到真正重要的事情上来停止无意义的争吵。
Go在某些点确实有突破比如让并发编程更容易、运行更高效比如垃圾回收让程序更安全比如基于消息Channel编程的支持比如内嵌关联结构这些都很赞因为编程语言发展这么多年任何突破都是艰难和宝贵的。
### Go特色
Go是介于C与C++之间的语言比C抽象层次高比C++抽象层次低。因为是一门新的编程语言站在巨人的肩膀博采众长规避了一些已知的问题开发了一些优秀的特征相比C/C++Go的核心特征包括以下几个方面
* 原生并发以东尼·霍尔的通信顺序进程CSP为基础的goroutine适合现代多核机器
* 垃圾回收,非常高效(请来世界顶级内存管理专家设计)
* 强大的标准库,对网络编程等的良好支持
* CGO提供了GO调用C机制扩展了GO的能力边界
* 内嵌关联数组
* 非侵入式的接口设计
* 简单清晰的语法
### 优点
* 自带gc。
* 静态编译,编译好后,扔服务器直接运行。
* 简单的思想,没有继承,多态,类等。
* 丰富的库和详细的开发文档。
* 语法层支持并发和拥有同步并发的channel类型使并发开发变得非常方便。
* 简洁的语法,提高开发效率,同时提高代码的阅读性和可维护性。
* 超级简单的交叉编译仅需更改环境变量。花了我两天时间编译一个imagemagick到arm平台
* 内含完善、全面的软件工程工具。Go语言自带的命令和工具相当地强大。通过它们我们可以很轻松地完成
* Go语言程序的获取、编译、测试、安装、运行、运行分析等一系列工作这几乎涉及了开发和维护一个软件的所有环节。
### Go VS C/C++
![](image/2021-05-20-07-25-25.png)
Go号称兼备C++的运行效率和PHP的开发效率但benchmarks好像并不支持这个结论数据有点打脸Go的运行效率接近却略低于Java。
![](image/2021-05-20-07-40-21.png)
## 2 从C的角度理解Go

Binary file not shown.

After

Width:  |  Height:  |  Size: 291 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 267 KiB

14
Go/test/1.go Normal file
View File

@@ -0,0 +1,14 @@
package main
import (
"fmt"
"net/http"
)
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, you've requested: %s\n", r.URL.Path)
})
http.ListenAndServe(":80", nil)
}

8
Go/test/go.mod Normal file
View File

@@ -0,0 +1,8 @@
module example.com/m
go 1.16
require (
github.com/ramya-rao-a/go-outline v0.0.0-20200117021646-2a048b4510eb // indirect
golang.org/x/tools v0.1.1 // indirect
)

26
Go/test/go.sum Normal file
View File

@@ -0,0 +1,26 @@
github.com/ramya-rao-a/go-outline v0.0.0-20200117021646-2a048b4510eb h1:ilZSL4VaIq4Hsi+lH928xQKnSWymFug6r2gJomUBpW8=
github.com/ramya-rao-a/go-outline v0.0.0-20200117021646-2a048b4510eb/go.mod h1:1WL5IqM+CnRCAbXetRnL1YVoS9KtU2zMhOi/5oAVPo4=
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.1.1 h1:wGiQel/hW0NnEkJUk8lbzkX2gFJU6PFxf1v5OlCfuOs=
golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=

View File

@@ -1,26 +0,0 @@
# 基于联邦学习的恶意软件表征系统研究
## 第一章:绪论
### 背景
### 国内外研究现状
### 研究内容
### 论文结构
## 第二章:相关技术研究
## 第三章基于DNN的特征生成模型
## 第四章:模型的解释方法与评估
## 第五章:联邦学习系统的构建
## 第六章:模型的效果评估
结论

View File

@@ -1,4 +1,13 @@
## 研究任务
## 任务
> 通过撰写论文驱动自己执行接下来的任务。研究任务->工程任务
- [ ] 1 数据预处理研究任务需要了解Android恶意软件的基础知识并提取特征。
- [ ] 2 阅读论文(研究任务),完成小论文和毕设论文的框架,以及大部分内容,实验和实验结果空着,等以后完成。
- [ ] 3 继续实验(研究任务),找到一种衡量非独立同分布的方法(分布不平衡的程度。完成毕设论文中设计的半监督实验,非独立同分布的实验,并横向纵向对比实验结果。
- [ ] 4 构建展示系统(工程任务)。做成一个可以用来展示的网站。可视化操作和训练过程。
## 研究任务(完成毕设论文)
> 四月份计划主要进行基础知识的学习和复习。完成了初步的数据处理。接下来的主要任务是阅读论文并完成论文复习计划。
> 开始执行五月份计划,与四月份计划进行衔接。完成工程上与学术上的推进工作。
@@ -6,74 +15,64 @@
> 抓紧吧基础的工程弄完,然后开始搞论文,然后在搞回工程。实现最终的系统。
> 我们是合作关系,而不是上下级关系。别懈怠了。
### **阅读论文**(两周)
> 100篇计划蒋师兄前前后后分享了估计也有一百篇了现在重新开始读论文在复现文章的同时进行广泛的阅读。利用citavi这个工具。
### 阅读论文(两周)
> 100篇计划蒋师兄前前后后分享了估计也有一百篇了现在重新开始读论文在复现文章的同时进行广泛的阅读。利用citavi这个工具。
- [ ] 待定
### **联邦学习文章复现**(四周)
### 联邦学习论文复现(四周)
> 阅读当前最新的联邦学习文章。使用别人的代码复现联邦学习的过程。复习和复现
### **恶意软件文章复现**(四周)
### 恶意软件文章复现(四周)
- [ ] DeepAMD
- [ ] CIC
### **联邦学习+恶意软件文章复现**(四周)
> 后续任务:论文撰写计划(六月份计划)
- [ ] 待定
## 工程任务(完成目标系统)
> 需要确定最终实现到什么程度。如果还是单机多线程仿真的大可不必进行大量修改。在本地通过socket多线程通信进行仿真即可。没有必要考虑网页端的训练用户将模型下载到Chrome浏览器中在Chrome浏览器中进行梯度下降大可不必。第一步应该是首先实现本地浏览器调用本地后端的程序进行仿真。然后尝试远程浏览器建立socket通信进行真实系统仿真。而且远程系统必须也有相关的Python环境才行或者直接在浏览器中使用JavaScript进行梯度下降。
> 对于单机仿真环境:前端调用后端的训练线程,实现联邦学习。
> 对于多机真实环境:前端直接下载模型,在浏览器中进行梯度下降,实现联邦学习过程。
### 初级阶段(五月份)
### **初级阶段**(五月份)
> 主要实现本地线程级别的仿真。用来完成研究中的实验和计划
> 该仿真实验主要是了验证论文,发论文。
- [ ] pysyft线程级别仿真
- [X] pysyft线程级别仿真
- [ ] pysyft论文仿真实验
- [ ] 针对联邦学习的仿真
- [ ] 针对恶意软件的仿真
- [ ] 尝试掌握最新的联邦学习框架既然选择了pysyft就不要考虑tensorflow了。pysyft的生态可能更好而且做起来简单。主要是tensorflow框架过于庞大很多东西虽然规范很好用起来方便但是训练过程着实过于麻烦。使用Keras还好。如果想要修改底层必然会耗费大量精力。tensorflow能够使用js在网页中完成训练pytorch也能够使用js在网页中完成训练。pytorch也能在android端完成训练。
- [ ] 对pysyft框架进行优化和扩展。
### **中级阶段**(六月份)
### 中级阶段(六月份)
> 主要对pysyft框架中的内容进行理解和修改。
> 构建pysyft对联邦学习的远程仿真实现。实现多端协同仿真实现可视化界面。
- [ ] 使用docker容器和socket编程实现多端协同训练。从仿真向现实场景过渡。
- [ ] 使用docker容器优化部署过程实现windows/linux/android场景下的跨平台实验。向现实场景过度。
### **最终阶段**(七八月份)
> 构建系统。主要是为了最终的毕业服务。
### 最终阶段八月份)
> 构建系统。主要是为了最终的毕业服务。
- [ ] 使用web服务器实现可视化。包括可视化训练过程的控制、可视化展示训练过程和训练结果。大概花一个月时间本质上为了毕业能够形成一个看起来很漂亮的系统
- 前端:
- [ ] 训练控制模块(训练过程的配置。选择训练客户端、选择控制客户端,设置训练的参数。加号按钮,在本地网页上进行选择。)
- [ ] 训练过程模块(训练过程中的日志和状态变化图。)
- [ ] 模型展示模块(用来展示训练结果,可视化训练模型)
- [ ] 恶意软件检测模块。参考手写体ONNX.js的网页简单好用
- 后端:
- [ ] 通信模块(参与者,与参与者之间通信的实现。可以通过报名和注册的方式参与其中。)
- [ ] 训练模块(联邦学习引擎,主要通过联邦学习的方法,训练一个恶意软件模型)
- [ ] 应用模块(恶意软件检测引擎,包括大量的恶意软件处理模块)
@@ -82,13 +81,23 @@
> 需要实现跨平台socket通信。如果弄完这个发一篇论文不怕比不了也。
考虑使用一下技术展示成果:
- html css javascrip
- bootstrap vue.js chart.js
- python django mysql
- bootstrap vue.js chart.js
- python django
- pytorch pysyft websocket
## 计划
### 每日计划
* 上午:三篇论文
* 下午:三篇论文
* 晚上:四篇论文
如何看论文:
### 每周计划
* 第九周4.26-5.2)完成论文阅读计划。
* 第十周5.3-5.9完成论文复现计划1——联邦学习论文复现
@@ -98,6 +107,11 @@
> 这样一看似乎真的没有时间。自己不过也只剩一个月的时间做完毕设了。
### 每月计划
* 五月份计划
* 六月份计划
* 七月份计划
* 八月份计划
## 收获

View File

@@ -1,8 +1,9 @@
## 计划
- [x] 五月份计划——ida 实现
- [x] 五月份计划——prox实现
- [X] 五月份计划——ida 实现
- [X] 五月份计划——prox实现
## 收获
* 学习了websocket的使用了解了Python异步通信编程。可以考虑使用Django快速构建本地的一个网站用来展示和控制联邦学习过程。
* 学习了websocket的使用了解了Python异步通信编程。可以考虑使用Django快速构建本地的一个网站用来展示和控制联邦学习过程。
* 参数服务器与客户端通信只能使用权重来更新服务器上的模型。因为如果使用梯度的话必须每个epoch或者每一个batchsize都要上传grad。但是在训练过程中可以经过多个epoch或者batchsize后上传权重进行合并。

View File

@@ -0,0 +1,75 @@
# 基于联邦学习的恶意软件检测系统研究
## 第一章:绪论
### 研究背景和意义
1. 恶意软件检测
2. 数据的需求:数据隐私保护的需求、数据无标签问题的解决、数据非独立同分布训练模型、数据动态变化问题的解决
3. 针对以上背景,研究基于机器学习的恶意软件检测模型构建方案有十分重要的意义
> 说实话,我主要是解决联邦学习中的问题,而非解决恶意软件检测的问题。为了解决数据中存在的问题,而非恶意软件相关的问题。如何让解决的问题与恶意软件检测进行强相关?而非与联邦学习强相关。
>
> 训练数据+训练算法->训练模型->恶意软件检测。
>
> 通过概述训练算法,解决训练数据中的需求和存在的问题,从而改善训练模型的准确率。而非直接更改模型,增强恶意软件检测的结果。需要把这个东西说明。
### 研究现状
1. 恶意软件检测的机器学习方案
2. 恶意软件检测的联邦学习方案
3. 恶意软件检测与半监督学习的方案
4. 联邦学习的隐私保护、半监督学习、非独立同分布等开放问题的解决方案。
### 研究内容
1. 联邦隐私保护学习方案
2. 联邦半监督学习方案
3. 联邦非独立同分布学习方案
### 论文结构
## 第二章:理论基础
### 1 恶意软件检测原理
> 恶意软件主要分类、恶意软件主要分类的依据和数学表示(接口、行为?)、恶意软件主要的检测方法利用到的原理。
### 2 特征提取技术
> 特征提取技术,特征降维方法。动静态特征的提取方法。
### 3 联邦学习
> 联邦学习的基础原理。联邦学习的实现方案。联邦学习的分类和数学表示。联邦学习中的开放问题。
### 4 隐私保护方法
> 差分隐私、同态加密方法。实现了多方安全计算。
### 5 半监督学习原理
> 半监督学习解决的问题。半监督学习的目标问题。
### 6 非独立同分布的原理
> 非独立同分布的原理、表示方法(衡量标准)、产生的影响(论证非独立同分布是联邦学习解决问题中的关键问题。)
## 第三章:基于联邦学习的恶意软件检测算法
## 第四章:基于联邦半监督学习的恶意软件检测算法
## 第五章:针对非独立同分布问题的恶意软件检测算法
## 第六章:恶意软件检测算法的实验与结果
## 第七章:恶意软件检测系统构建
1. 训练控制模块
2. 网络通信模块
3. 训练展示模块
4. 实验结果对比模块
## 结论

View File

@@ -0,0 +1,7 @@
> 文章的研究方向,应该主要包括以下三个点。
## 数据的隐私性问题——联邦学习与隐私保护框架
## 数据的非独立同分布问题——非独立同分布&联邦学习算法
## 数据的标签缺失问题——半监督学习&联邦学习算法