Merge pull request #477 from naah69/master

github page
This commit is contained in:
scutan90 2020-07-30 09:15:06 +08:00 committed by GitHub
commit c8c06ed411
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
29 changed files with 5797 additions and 625 deletions

0
.nojekyll Normal file
View File

View File

@ -389,7 +389,7 @@ P(A/B) = P(A\cap B) / P(B)
$$
Description: The event or subset $A$ and $B$ in the same sample space $\Omega$, if an element randomly selected from $\Omega$ belongs to $B$, then the next randomly selected element The probability of belonging to $A$ is defined as the conditional probability of $A$ on the premise of $B$.
![conditional probability](./img/ch1/conditional_probability.jpg)
![conditional probability](img/ch1/conditional_probability.jpg)
According to the Venn diagram, it can be clearly seen that in the event of event B, the probability of event A occurring is $P(A\bigcap B)$ divided by $P(B)$.
Example: A couple has two children. What is the probability that one of them is a girl and the other is a girl? (I have encountered interviews and written tests)

View File

@ -12,19 +12,19 @@ Machine Learning (ML), as the name suggests, lets the machine learn. Here, the m
|Regression Algorithm|Clustering Algorithm|Regularization Method|
|:-:|:-:|:-:|
|![](./img/ch2/2.1/1.jpg)|![](./img/ch2/2.1/2.jpg)|![](./img/ch2/2.1/3.jpg )|
|![](img/ch2/2.1/1.jpg)|![](img/ch2/2.1/2.jpg)|![](img/ch2/2.1/3.jpg )|
| Decision Tree Learning | Bayesian Methods | Kernel-Based Algorithms |
|:-:|:-:|:-:|
|![](./img/ch2/2.2.4.png)|![](./img/ch2/2.1/5.jpg)|![](./img/ch2/2.1/6.jpg )|
|![](img/ch2/2.2.4.png)|![](img/ch2/2.1/5.jpg)|![](img/ch2/2.1/6.jpg )|
|Clustering Algorithm|Association Rule Learning|Artificial Neural Network|
|:-:|:-:|:-:|
|![](./img/ch2/2.1/7.jpg)|![](./img/ch2/2.2.8.png)|![](./img/ch2/2.2.09.png )|
|![](img/ch2/2.1/7.jpg)|![](img/ch2/2.2.8.png)|![](img/ch2/2.2.09.png )|
|Deep Learning|Lower Dimensional Algorithm|Integrated Algorithm|
|:-:|:-:|:-:|
|![](./img/ch2/2.2.10.png)|![](./img/ch2/2.2.11.png)|![](./img/ch2/2.2.12.png )|
|![](img/ch2/2.2.10.png)|![](img/ch2/2.2.11.png)|![](img/ch2/2.2.12.png )|
## 2.3 Supervised learning, unsupervised learning, semi-supervised learning, weak supervision learning?
There are different ways to model a problem, depending on the type of data. According to different learning methods and input data, machine learning is mainly divided into the following four learning methods.
@ -95,7 +95,7 @@ For example, Full Connected (FC) neural network, its rules include:
**Neural Network Architecture**
The picture below is a neural network system, which consists of many layers. The input layer is responsible for receiving information, such as a picture of a cat. The output layer is the result of the computer's judgment on this input information, it is not a cat. The hidden layer is the transfer and processing of input information.
![](./img/ch2/2.5.1.png)
![](img/ch2/2.5.1.png)
## 2.7 Understanding Local Optimization and Global Optimization
@ -138,7 +138,7 @@ Therefore, when using the classification model or the regression model in the ac
3) False negatives (FN): the number of instances that are incorrectly divided into negative examples, that is, the number of instances that are actually positive but are classified as negative by the classifier;
4) True negatives(TN): The number of negative cases that are correctly divided into negative examples, which are actually negative examples and are divided into negative examples by the classifier.
![](./img/ch2/2.9/1.png)
![](img/ch2/2.9/1.png)
The figure above is the confusion matrix of these four terms, and the following is explained:
1) P = TP + FN represents the number of samples that are actually positive examples.
@ -184,7 +184,7 @@ In order to integrate the classification of multiple categories and evaluate the
The ROC curve is an abbreviation for (Receiver Operating Characteristic Curve), which is a performance evaluation curve with sensitivity (true positive rate) as the ordinate and 1-specific (false positive rate) as the abscissa. . The ROC curves of different models for the same data set can be plotted in the same Cartesian coordinate system. The closer the ROC curve is to the upper left corner, the more reliable the corresponding model is. The model can also be evaluated by the area under the ROC curve (Area Under Curve, AUC). The larger the AUC, the more reliable the model.
![](./img/ch2/2.7.3.png)
![](img/ch2/2.7.3.png)
Figure 2.7.3 ROC curve
@ -283,7 +283,7 @@ $$
Suppose there are two parameters, $A$ and $B$, in the function. When the parameters change, it is assumed that the function state will also change.
As shown below:
![](./img/ch2/2.16/1.jpg)
![](img/ch2/2.16/1.jpg)
To fit the discrete points in the graph, we need to find the best $A$ and $B$ as possible to make this line more representative of all the data. How to find the optimal solution, which needs to be solved using the cost function, taking the squared error cost function as an example, assuming the function is $h(x)=\theta_0x$.
The main idea of the square error cost function is to make the difference between the value given by the actual data and the corresponding value of the fitted line, and find the difference between the fitted line and the actual line. In practical applications, in order to avoid the impact of individual extreme data, a similar variance is used to take one-half of the variance to reduce the impact of individual data. Therefore, the cost function is derived:
@ -294,7 +294,7 @@ $$
**The optimal solution is the minimum value of the cost function**$\min J(\theta_0, \theta_1) $. If it is a parameter, the cost function is generally visualized by a two-dimensional curve. If it is 2 parameters, the cost function can see the effect through the 3D image. The more parameters, the more complicated.
When the parameter is 2, the cost function is a three-dimensional image.
![](./img/ch2/2.16/2.jpg)
![](img/ch2/2.16/2.jpg)
### 2.10.3 Why is the cost function non-negative?
There is a lower bound on the objective function. In the optimization process, if the optimization algorithm can reduce the objective function continuously, according to the monotonically bounded criterion, the optimization algorithm can prove that the convergence is effective.
@ -319,7 +319,7 @@ Where $z $ represents the input of the neuron and $\sigma $ represents the
*Note*: The activation function commonly used in neural networks is the sigmoid function. The curve of this function is as follows:
![](./img/ch2/2.18/1.jpg)
![](img/ch2/2.18/1.jpg)
Compare the two points of 0.88 and 0.98 as shown:
Assume that the target is to converge to 1.0. 0.88 is farther from the target 1.0, the gradient is larger, and the weight adjustment is larger. 0.98 is closer to the target 1.0, the gradient is smaller, and the weight adjustment is smaller. The adjustment plan is reasonable.
@ -569,7 +569,7 @@ Gradient concepts need to be noted:
### 2.12.3 Gradient descent method intuitive understanding?
Classical illustration of the gradient descent method:
![](./img/ch2/2.25/1.png)
![](img/ch2/2.25/1.png)
Visualization example:
> From the above picture, if at the beginning, we are somewhere on a mountain, because there are strangers everywhere, we dont know the way down the mountain, so we can only explore the steps based on intuition, in the process, Every time you go to a position, it will solve the gradient of the current position, go down one step along the negative direction of the gradient, that is, the current steepest position, and then continue to solve the current position gradient, and the steepest position along this step. The easiest place to go down the mountain. Constantly cycle through the gradients, and so on, step by step, until we feel that we have reached the foot of the mountain. Of course, if we go on like this, it is possible that we cannot go to the foot of the mountain, but to the low point of a certain local peak.
@ -784,7 +784,7 @@ If you summarize the LDA idea in one sentence, that is, "the variance within the
### 2.14.2 Graphical LDA Core Ideas
Assume that there are two types of data, red and blue. These data features are two-dimensional, as shown in the following figure. Our goal is to project these data into one dimension, so that the projection points of each type of similar data are as close as possible, and the different types of data are as far as possible, that is, the distance between the red and blue data centers in the figure is as large as possible.
![](./img/ch2/2.29/1.png)
![](img/ch2/2.29/1.png)
The left and right images are two different projections.
@ -885,7 +885,7 @@ The PCA can solve the problem that there are too many data features or cumbersom
Suppose the data set is m n-dimensional, $(x^{(1)}, x^{(2)}, \cdots, x^{(m)})$. If n=2, you need to reduce the dimension to $n'=1$. Now you want to find the data of a dimension that represents these two dimensions. The figure below has $u_1, u_2$ two vector directions, but which vector is what we want, can better represent the original data set?
![](./img/ch2/2.34/1.png)
![](img/ch2/2.34/1.png)
As can be seen from the figure, $u_1$ is better than $u_2$, why? There are two main evaluation indicators:
1. The sample point is close enough to this line.
@ -1048,7 +1048,7 @@ Noise: Describes the lower bound of the expected generalization error that any l
- The smaller the Variance, the higher the generalization of the model; conversely, the lower the ability of the model to generalize.
- If the model has a good fitting effect on the training set, but the fitting effect on the test set is relatively poor, the variance is large, indicating that the stability of the model is poor. This phenomenon may be due to the model training set. Caused by the fit. As shown in the right column of the figure below.
> ![](./img/ch2/2.16.20.1.png)
> ![](img/ch2/2.16.20.1.png)
>
### 2.16.3 Empirical error and generalization error
@ -1061,7 +1061,7 @@ Generalization error: The error of the model on the new sample set (test set) is
Under-fitting is different from over-fitting plots depending on the coordinate method.
1. **The horizontal axis is the number of training samples and the vertical axis is the error**
![](./img/ch2/2.16.4.1.jpg)
![](img/ch2/2.16.4.1.jpg)
As shown in the figure above, we can visually see the difference between under-fitting and over-fitting:
@ -1073,7 +1073,7 @@ The model is normal: there are relatively low deviations and variances on both t
2. **The horizontal axis is the complexity of the model and the vertical axis is the error**
![](./img/ch2/2.16.4.2.png)
![](img/ch2/2.16.4.2.png)
The red line is the Error on the test set, and the blue line is the Error on the training set.
@ -1085,7 +1085,7 @@ The model is normal: the model complexity control is optimal at point B.
3. **The horizontal axis is the regular term coefficient and the vertical axis is the error**
![](./img/ch2/2.16.4.3.png)
![](img/ch2/2.16.4.3.png)
The red line is the Error on the test set, and the blue line is the Error on the training set.
@ -1182,7 +1182,7 @@ The ROC curve is calculated by setting a continuous variable to a plurality of d
For classifiers, or classification algorithms, the evaluation indicators mainly include precision, recall, and F-score. The figure below is an example of a ROC curve.
![](./img/ch2/2.40.10/1.png)
![](img/ch2/2.40.10/1.png)
The abscissa of the ROC curve is the false positive rate (FPR) and the ordinate is the true positive rate (TPR). among them
$$
@ -1206,7 +1206,7 @@ step:
3. Select a different threshold each time to get a set of FPR and TPR, which is a point on the ROC curve. In this way, a total of 20 sets of FPR and TPR values were obtained. The FPR and TPR are briefly understood as follows:
4. Draw according to each coordinate point in 3).
![](./img/ch2/2.40.11/1.jpg)
![](img/ch2/2.40.11/1.jpg)
### 2.16.13 How to calculate TPR, FPR?
1. Analysis of data
@ -1291,7 +1291,7 @@ Because the ROC curve has a very good property: when the distribution of positiv
### 2.16.17 Intuitive understanding of AUC
The figure below shows the values of the three AUCs:
![](./img/ch2/2.40.15/1.png)
![](img/ch2/2.40.15/1.png)
AUC is an evaluation index to measure the pros and cons of the two-category model, indicating the probability that the positive example is in front of the negative example. Other evaluation indicators have accuracy, accuracy, and recall rate, and AUC is more common than the three.
Generally, in the classification model, the prediction results are expressed in the form of probability. If the accuracy is to be calculated, a threshold is usually set manually to convert the corresponding probability into a category, which greatly affects the accuracy of the model. Rate calculation.
@ -1299,19 +1299,19 @@ Example:
Now suppose that a trained two-classifier predicts 10 positive and negative samples (5 positive cases and 5 negative examples). The best prediction result obtained by sorting the scores in high to low is [1, 1, 1, 1, 1, 0, 0, 0, 0, 0], that is, 5 positive examples are ranked in front of 5 negative examples, and the positive example is 100% in front of the negative example. Then draw its ROC curve, since it is 10 samples, we need to draw 10 points in addition to the origin, as follows:
![](./img/ch2/2.16.17-1.png)
![](img/ch2/2.16.17-1.png)
The method of traversing starts from left to right according to the score of the sample prediction result. Starting from the origin, every time you encounter 1, move the y-axis in the positive direction of the y-axis with a minimum step size of 1 unit, here is 1/5=0.2; every time you encounter 0, move to the x-axis positive direction, the x-axis minimum step size is 1 Unit, here is also 0.2. It is not difficult to see that the AUC of the above figure is equal to 1, which confirms that the probability that the positive example is in front of the negative example is indeed 100%.
Assume that the prediction result sequence is [1, 1, 1, 1, 0, 1, 0, 0, 0, 0].
![](./img/ch2/2.16.17-2.png)
![](img/ch2/2.16.17-2.png)
Calculate the AUC of the above figure is 0.96 and the probability of calculating the positive example is 0.8 × 1 + 0.2 × 0.8 = 0.96 in front of the negative example, and the area of the shadow in the upper left corner is the probability that the negative example is in front of the positive example. × 0.2 = 0.04.
Assume that the prediction result sequence is [1, 1, 1, 0, 1, 0, 1, 0, 0, 0].
![](./img/ch2/2.16.17-3.png)
![](img/ch2/2.16.17-3.png)
Calculate the AUC of the above figure is 0.88 and the probability of calculating the positive example and the front of the negative example is equal to 0.6 × 1 + 0.2 × 0.8 + 0.2 × 0.6 = 0.88. The area of the shaded part in the upper left corner is the negative example in front of the positive example. The probability is 0.2 × 0.2 × 3 = 0.12.
@ -1319,7 +1319,7 @@ Calculate the AUC of the above figure is 0.88 and the probability of calculating
Different errors can come at different costs. Taking the dichotomy as an example, set the cost matrix as follows:
![](./img/ch2/2-1.png)
![](img/ch2/2-1.png)
When the judgment is correct, the value is 0. When it is incorrect, it is $Cost_{01} $ and $Cost_{10} $ respectively.
@ -1353,7 +1353,7 @@ Note: Each point of the ROC corresponds to a line on the cost plane.
For example, on the ROC (TPR, FPR), FNR=1-TPR is calculated, and a line segment from (0, FPR) to (1, FNR) is drawn on the cost plane, and the area is the expected overall cost under the condition. The area under the bounds of all segments, the expected overall cost of the learner under all conditions.
![](./img/ch2/2.16.18.1.png)
![](img/ch2/2.16.18.1.png)
### 2.16.19 What are the comparison test methods for the model?
Correctness analysis: model stability analysis, robustness analysis, convergence analysis, trend analysis, extreme value analysis, etc.
@ -1442,7 +1442,7 @@ Pruning: Decision trees are easy to overfit, generally requiring pruning, reduci
### 2.17.3 Decision Tree Learning Basic Algorithm
![](./img/ch2/2-5.png)
![](img/ch2/2-5.png)
### 2.17.4 Advantages and disadvantages of decision tree algorithms
@ -1530,7 +1530,7 @@ Support Vector Machine (SVM): The meaning is a classifier that supports vector o
In a two-dimensional environment, points R, S, G and other points near the middle black line can be seen as support vectors, which can determine the specific parameters of the classifier, black line.
![](./img/ch2/2-6.png)
![](img/ch2/2-6.png)
The support vector machine is a two-class model. Its purpose is to find a hyperplane to segment the sample. The principle of segmentation is to maximize the interval and finally transform it into a convex quadratic programming problem. The simple to complex models include:
@ -1752,7 +1752,7 @@ LR mainly relies on feature structure, and must combine cross-characteristics an
The principle of maximum likelihood estimation is illustrated by a picture, as shown in the following figure:
![](./img/ch2/2.19.1.1.png)
![](img/ch2/2.19.1.1.png)
Example: There are two boxes with the same shape. There are 99 white balls and 1 black ball in the 1st box. There are 1 white ball and 99 black balls in the 2nd box. In one experiment, the black ball was taken out. Which box was taken out from?
@ -1867,7 +1867,7 @@ $$
$$
Then, estimate the conditional probability for each attribute (here, for continuous attributes, assume they follow a normal distribution)
![](./img/ch2/2.19.5C.png)
![](img/ch2/2.19.5C.png)
Then there is
$$
@ -1954,7 +1954,7 @@ The above is the M step of the EM algorithm, $\sum\limits_{z^{(i)}}Q_i(z^{(i)})l
Considering the formula (a) in the previous section, there are hidden variables in the expression. It is difficult to find the parameter estimation directly. The EM algorithm is used to iteratively solve the maximum value of the lower bound until convergence.
![](./img/ch2/2.20.1.jpg)
![](img/ch2/2.20.1.jpg)
The purple part of the picture is our target model $p(x|\theta)$. The model is complex and difficult to find analytical solutions. In order to eliminate the influence of the hidden variable $z^{(i)}$, we can choose one not. The $r(x|\theta)$ model containing $z^{(i)}$ is such that it satisfies the condition $r(x|\theta) \leq p(x|\theta) $.
@ -1999,23 +1999,23 @@ If the data set contains 10 photos, the photo contains both triangle and circle
![](./img/ch2/2.21.1.1.png)
![](img/ch2/2.21.1.1.png)
Figure 2.21.1.a
As can be seen from the above figure, if only one feature is classified, the triangle and the circle are almost evenly distributed on this line segment, and it is difficult to linearly classify 10 photos. So what happens when you add a feature:
![](./img/ch2/2.21.1.2.png)
![](img/ch2/2.21.1.2.png)
Figure 2.21.1.b
After adding a feature, we found that we still couldn't find a straight line to separate the cat from the dog. So, consider adding another feature:
![](./img/ch2/2.21.1.3.png)
![](img/ch2/2.21.1.3.png)
Figure 2.21.1.c
![](./img/ch2/2.21.1.4.png)
![](img/ch2/2.21.1.4.png)
Figure 2.21.1.d
@ -2033,25 +2033,25 @@ By analogy, if you continue to increase the number of features, the sample densi
Let's look at what happens when you map the classification results of high-dimensional space to low-dimensional space.
![](./img/ch2/2.21.1.5.png)
![](img/ch2/2.21.1.5.png)
Figure 2.21.1.e
The above figure is the result of mapping the 3D feature space to the 2D feature space. Although the training samples are linearly separable in the high dimensional feature space, the results are reversed after mapping to the low dimensional space. In fact, increasing the number of features makes the high-dimensional space linearly separable, which is equivalent to training a complex nonlinear classifier in a low-dimensional space. However, this nonlinear classifier is too "smart" to learn only a few special cases. If it is used to identify test samples that have not appeared in the training sample, the results are usually not ideal and can cause over-fitting problems.
![](./img/ch2/2.21.1.6a.png)
![](img/ch2/2.21.1.6a.png)
Figure 2.21.1.f
The linear classifier with only two features shown in the above figure is divided into some training samples. The accuracy does not seem to be as high as in Figure 2.21.1.e. However, the generalization ability ratio of linear classifiers with two features is shown. A linear classifier with three features is stronger. Because the linear classifier with two features learns not only the special case, but an overall trend, which can be better distinguished for those samples that have never appeared before. In other words, by reducing the number of features, over-fitting problems can be avoided, thereby avoiding "dimensionality disasters."
![](./img/ch2/2.21.1.6.png)
![](img/ch2/2.21.1.6.png)
From another perspective, the "dimensional disaster" is explained. Assuming that there is only one feature, the range of features is 0 to 1, and the eigenvalues of each triangle and circle are unique. If we want the training sample to cover 20% of the eigenvalue range, then we need 20% of the total number of triangles and circles. After we add a feature, 45% (0.452 = 0.2) of the total number of triangles and circles is needed to continue covering 20% of the eigenvalue range. After continuing to add a feature, 58% (0.583 = 0.2) of the total number of triangles and circles is required. As the number of features increases, more training samples are needed to cover 20% of the eigenvalue range. If there are not enough training samples, there may be over-fitting problems.
Through the above example, we can see that the more the number of features, the more sparse the training samples will be, the less accurate the parameter estimates of the classifier will be, and the over-fitting problem will be more likely to occur. Another effect of the "dimension disaster" is that the sparsity of the training samples is not evenly distributed. The training samples at the center are more sparse than the surrounding training samples.
![](./img/ch2/2.21.1.7.png)
![](img/ch2/2.21.1.7.png)
Suppose there is a two-dimensional feature space, such as the rectangle shown in Figure 8, with an inscribed circle inside the rectangle. As the sample closer to the center of the circle is sparse, those samples located at the four corners of the rectangle are more difficult to classify than the samples within the circle. When the dimension becomes larger, the capacity of the feature hyperspace does not change, but the capacity of the unit circle tends to zero. In the high-dimensional space, most of the training data resides in the corner of the feature hyperspace. Data scattered in the corner is harder to classify than data in the center.
@ -2073,13 +2073,13 @@ Clustering is used to find the distribution structure inherent in data, either a
1) In some recommendation systems, the type of new user needs to be determined, but it is not easy to define the “user type”. In this case, the original user data can be clustered first, and each cluster is clustered according to the clustering result. Defined as a class, and then based on these classes to train the classification model to identify the type of new user.
![](./img/ch2/2.21.3.1.png)
![](img/ch2/2.21.3.1.png)
2) Dimensionality reduction is an important method to alleviate the dimensionality disaster. It is to transform the original high-dimensional attribute space into a low-dimensional "subspace" through some mathematical transformation. It is based on the assumption that although the data samples that people usually observe are high-dimensional, what is actually related to the learning task is a low-dimensional distribution. Therefore, the description of the data can be realized through the most important feature dimensions, which is helpful for the subsequent classification. For example, the Titanic on Kaggle was still a problem. By giving a person a number of characteristics such as age, name, gender, fare, etc., to determine whether it can survive in a shipwreck. This requires first feature screening to identify the main features and make the learned models more generalizable.
Both clustering and dimensionality reduction can be used as preprocessing steps for classification and other issues.
![](./img/ch2/2-19.jpg)
![](img/ch2/2-19.jpg)
But although they can achieve the reduction of data. However, the two objects are different, the clustering is for data points, and the dimension reduction is for the characteristics of the data. In addition, they have a variety of implementation methods. K-means, hierarchical clustering, density-based clustering, etc. are commonly used in clustering; PCA, Isomap, LLE, etc. are commonly used in dimension reduction.
@ -2120,7 +2120,7 @@ Steps:
According to the order of hierarchical decomposition, whether it is bottom-up or top-down, the hierarchical clustering algorithm is divided into a condensed hierarchical clustering algorithm and a split hierarchical clustering algorithm.
The strategy of condensed hierarchical clustering is to first treat each object as a cluster, then merge the clusters into larger and larger clusters until all objects are in one cluster, or a certain termination condition is satisfied. Most hierarchical clusters belong to agglomerative hierarchical clustering, which differ only in the definition of similarity between clusters. The four widely used methods for measuring the distance between clusters are as follows:
![](./img/ch2/2-20.gif)
![](img/ch2/2-20.gif)
Here is the flow of the condensed hierarchical clustering algorithm using the minimum distance:
@ -2148,7 +2148,7 @@ In 1965, Professor Zade of the University of California, Berkeley, first propose
The FCM algorithm is an algorithm that determines the degree to which each data point belongs to a certain cluster degree by membership degree. This clustering algorithm is an improvement of the traditional hard clustering algorithm.
![](./img/ch2/2-21.gif)
![](img/ch2/2-21.gif)
Algorithm flow:
@ -2168,7 +2168,7 @@ In the experiment, IRIS [13] data set in the international UCI database dedicate
Based on the previous algorithm principles and algorithm flow, the programming operation is performed by matlab, and the clustering results shown in Table 1 are obtained.
![](./img/ch2/2-22.gif)
![](img/ch2/2-22.gif)
As shown in Table 1, for the four clustering algorithms, compare them in three aspects:

View File

@ -14,7 +14,7 @@ The feature neuron model in the multi-layer perceptron is called the perceptron
The simple perceptron is shown below:
![](./img/ch3/3-1.png)
![](img/ch3/3-1.png)
Where $x_1$, $x_2$, $x_3$ is the input to the perceptron, and its output is:
@ -46,30 +46,30 @@ $$
Set the appropriate $x$ and $b$ , a simple perceptual unit's NAND gate is expressed as follows:
![](./img/ch3/3-2.png)
![](img/ch3/3-2.png)
When the input is $0$, $1$, the perceptron output is $ 0 * (-2) + 1 * (-2) + 3 = 1$.
More complex perceptrons are composed of simple perceptron units:
![](./img/ch3/3-3.png)
![](img/ch3/3-3.png)
**Multilayer Perceptron**
The multi-layer perceptron is promoted by the perceptron. The most important feature is that there are multiple neuron layers, so it is also called deep neural network. Each neuron in the $i$ layer of the multilayer perceptron is connected to each neuron in the $i-1$ layer compared to a separate perceptron.
![](./img/ch3/3.1.1.5.png)
![](img/ch3/3.1.1.5.png)
The output layer can have more than $1$ neurons. The hidden layer can have only $1 $ layers, or it can have multiple layers. The output layer is a neural network of multiple neurons such as the following:
![](./img/ch3/3.1.1.6.png)
![](img/ch3/3.1.1.6.png)
### 3.1.2 What are the common model structures of neural networks?
The figure below contains most of the commonly used models:
![](./img/ch3/3-7.jpg)
![](img/ch3/3-7.jpg)
### 3.1.3 How to choose a deep learning development platform?
@ -108,14 +108,14 @@ Some platforms are specifically developed for deep learning research and applica
The reason for the disappearance of the gradient is affected by many factors, such as the size of the learning rate, the initialization of the network parameters, and the edge effect of the activation function. In the deep neural network, the gradient calculated by each neuron is passed to the previous layer, and the gradient received by the shallower neurons is affected by all previous layer gradients. If the calculated gradient value is very small, as the number of layers increases, the obtained gradient update information will decay exponentially, and the gradient disappears. The figure below shows the learning rate of different hidden layers:
![](./img/ch3/3-8.png)
![](img/ch3/3-8.png)
2. Exploding Gradient
In a network structure such as a deep network or a Recurrent Neural Network (RNN), gradients can accumulate in the process of network update, becoming a very large gradient, resulting in a large update of the network weight value, making the network unstable; In extreme cases, the weight value will even overflow and become a $NaN$ value, which cannot be updated anymore.
3. Degeneration of the weight matrix results in a reduction in the effective degrees of freedom of the model. The degradation rate of learning in the parameter space is slowed down, which leads to the reduction of the effective dimension of the model. The available degrees of freedom of the network contribute to the gradient norm in learning. As the number of multiplication matrices (ie, network depth) increases, The product of the matrix becomes more and more degraded. In nonlinear networks with hard saturated boundaries (such as ReLU networks), as the depth increases, the degradation process becomes faster and faster. The visualization of this degradation process is shown in a 2014 paper by Duvenaud et al:
![](./img/ch3/3-9.jpg)
![](img/ch3/3-9.jpg)
As the depth increases, the input space (shown in the upper left corner) is twisted into thinner and thinner filaments at each point in the input space, and only one direction orthogonal to the filament affects the response of the network. In this direction, the network is actually very sensitive to change.
@ -129,9 +129,9 @@ Traditional machine learning needs to define some manual features to purposefull
![](./img/ch3/3.1.6.1.png)
![](img/ch3/3.1.6.1.png)
![](./img/ch3/3-11.jpg)
![](img/ch3/3-11.jpg)
## 3.2 Network Operations and Calculations
@ -141,7 +141,7 @@ There are two main types of neural network calculations: foward propagation (FP)
** Forward Propagation**
![](./img/ch3/3.2.1.1.png)
![](img/ch3/3.2.1.1.png)
Suppose the upper node $ i, j, k, ... $ and so on are connected to the node $ w $ of this layer, so what is the value of the node $ w $? That is, the weighting operation is performed by the nodes of $i, j, k, ... $ above and the corresponding connection weights, and the final result is added with an offset term (for simplicity in the figure) Finally, through a non-linear function (ie activation function), such as $ReLu $, $ sigmoid $ and other functions, the final result is the output of this layer node $ w $.
@ -149,7 +149,7 @@ Finally, through this method of layer by layer operation, the output layer resul
**Backpropagation**
![](./img/ch3/3.2.1.2.png)
![](img/ch3/3.2.1.2.png)
Because of the final result of our forward propagation, taking the classification as an example, there is always an error in the end. How to reduce the error? One algorithm that is widely used at present is the gradient descent algorithm, but the gradient requires the partial derivative. The Chinese alphabet is used as an example to explain:
@ -157,7 +157,7 @@ Let the final error be $ E $ and the activation function of the output layer be
### 3.2.2 How to calculate the output of the neural network?
![](./img/ch3/3.2.2.1.png)
![](img/ch3/3.2.2.1.png)
As shown in the figure above, the input layer has three nodes, which we numbered as 1, 2, and 3; the four nodes of the hidden layer are numbered 4, 5, 6, and 7; the last two nodes of the output layer are numbered 8. 9. For example, node 4 of the hidden layer is connected to the three nodes 1, 2, and 3 of the input layer, and the weights on the connection are $ w_{41}, w_{42}, w_{43} $.
@ -185,7 +185,7 @@ For the same reason, we can also calculate $ y_2 $. So that the output values
Suppose there is a 5\*5 image, convolved with a 3\*3 filter, and I want a 3\*3 Feature Map, as shown below:
![](./img/ch3/3.2.3.1.png)
![](img/ch3/3.2.3.1.png)
$ x_{i,j} $ represents the $ j $ column element of the $ i $ line of the image. $ w_{m,n} $ means filter $ m $ line $ n $ column weight. $ w_b $ represents the offset of $filter$. Table $a_i, _j$ shows the feature map $ i$ line $ j $ column element. $f$ represents the activation function, here the $ReLU$ function is used as an example.
@ -211,15 +211,15 @@ $$
The calculation process is illustrated as follows:
![](./img/ch3/3.2.3.2.png)
![](img/ch3/3.2.3.2.png)
By analogy, all Feature Maps are calculated.
![](./img/ch3/3.2.3.4.png)
![](img/ch3/3.2.3.4.png)
When the stride is 2, the Feature Map is calculated as follows
![](./img/ch3/3.2.3.5.png)
![](img/ch3/3.2.3.5.png)
Note: Image size, stride, and the size of the Feature Map after convolution are related. They satisfy the following relationship:
@ -252,7 +252,7 @@ Where $D$ is the depth; $F$ is the size of the filter; $w_{d,m,n}$ represents th
There can be multiple filters per convolutional layer. After each filter is convolved with the original image, you get a Feature Map. The depth (number) of the Feature Map after convolution is the same as the number of filters in the convolutional layer. The following illustration shows the calculation of a convolutional layer with two filters. $7*7*3$ Input, after two convolutions of $3*3*3$ filter (step size is $2$), get the output of $3*3*2$. The Zero padding in the figure is $1$, which is a $0$ around the input element.
![](./img/ch3/3.2.3.6.png)
![](img/ch3/3.2.3.6.png)
The above is the calculation method of the convolutional layer. This is a partial connection and weight sharing: each layer of neurons is only connected to the upper layer of neurons (convolution calculation rules), and the weight of the filter is the same for all neurons in the previous layer. For a convolutional layer containing two $3 * 3 * 3 $ fitlers, the number of parameters is only $ (3 * 3 * 3+1) * 2 = 56 $, and the number of parameters is the same as the previous one. The number of layers of neurons is irrelevant. Compared to a fully connected neural network, the number of parameters is greatly reduced.
@ -260,7 +260,7 @@ The above is the calculation method of the convolutional layer. This is a partia
The main role of the Pooling layer is to downsample, further reducing the number of parameters by removing unimportant samples from the Feature Map. There are many ways to pooling, the most common one is Max Pooling. Max Pooling actually takes the maximum value in the sample of n\*n as the sampled value after sampling. The figure below is 2\*2 max pooling:
![](./img/ch3/3.2.4.1.png)
![](img/ch3/3.2.4.1.png)
In addition to Max Pooing, Average Pooling is also commonly used - taking the average of each sample.
For a Feature Map with a depth of $ D $ , each layer does Pooling independently, so the depth after Pooling is still $ D $.
@ -269,7 +269,7 @@ For a Feature Map with a depth of $ D $ , each layer does Pooling independently,
A typical three-layer neural network is as follows:
![](./img/ch3/3.2.5.1.png)
![](img/ch3/3.2.5.1.png)
Where Layer $ L_1 $ is the input layer, Layer $ L_2 $ is the hidden layer, and Layer $ L_3 $ is the output layer.
@ -279,11 +279,11 @@ If the input and output are the same, it is a self-encoding model. If the raw da
Suppose you have the following network layer:
![](./img/ch3/3.2.5.2.png)
![](img/ch3/3.2.5.2.png)
The input layer contains neurons $ i_1, i_2 $, offset $ b_1 $; the hidden layer contains neurons $ h_1, h_2 $, offset $ b_2 $, and the output layer is $ o_1, o_2 $, $ W_i $ is the weight of the connection between the layers, and the activation function is the $sigmoid $ function. Take the initial value of the above parameters, as shown below:
![](./img/ch3/3.2.5.3.png)
![](img/ch3/3.2.5.3.png)
among them:
@ -365,7 +365,7 @@ $$
The following diagram can be more intuitive to see how the error propagates back:
![](./img/ch3/3.2.5.4.png)
![](img/ch3/3.2.5.4.png)
### 3.2.6 What is the meaning of the neural network more "deep"?
@ -429,7 +429,7 @@ Among them, the search process requires a search algorithm, generally: grid sear
The function image is as follows:
![](./img/ch3/3-26.png)
![](img/ch3/3-26.png)
2. tanh activation function
@ -437,7 +437,7 @@ Among them, the search process requires a search algorithm, generally: grid sear
The function image is as follows:
![](./img/ch3/3-27.png)
![](img/ch3/3-27.png)
3. Relu activation function
@ -445,7 +445,7 @@ Among them, the search process requires a search algorithm, generally: grid sear
The function image is as follows:
![](./img/ch3/3-28.png)
![](img/ch3/3-28.png)
4. Leak Relu activation function
@ -458,7 +458,7 @@ Among them, the search process requires a search algorithm, generally: grid sear
The image is as follows ($ a = 0.5 $):
![](./img/ch3/3-29.png)
![](img/ch3/3-29.png)
5. SoftPlus activation function
@ -466,7 +466,7 @@ Among them, the search process requires a search algorithm, generally: grid sear
The function image is as follows:
![](./img/ch3/3-30.png)
![](img/ch3/3-30.png)
6. softmax function
@ -478,7 +478,7 @@ Among them, the search process requires a search algorithm, generally: grid sear
For common activation functions, the derivative is calculated as follows:
![](./img/ch3/3-31.png)
![](img/ch3/3-31.png)
### 3.4.4 What are the properties of the activation function?
@ -517,7 +517,7 @@ The following are common choices:
The Relu activation function image is as follows:
![](./img/ch3/3-32.png)
![](img/ch3/3-32.png)
According to the image, it can be seen that it has the following characteristics:
@ -543,15 +543,15 @@ $$
From the following figure, the neural network contains the input layer, and then processed by two feature layers. Finally, the softmax analyzer can get the probability under different conditions. Here, it needs to be divided into three categories, and finally get $ y=0. , y=1, y=2 probability value of $.
![](./img/ch3/3.4.9.1.png)
![](img/ch3/3.4.9.1.png)
Continuing with the picture below, the three inputs pass through softmax to get an array of $[0.05, 0.10, 0.85] $, which is the function of soft.
![](./img/ch3/3.4.9.2.png)
![](img/ch3/3.4.9.2.png)
The more visual mapping process is shown below:
![****](./img/ch3/3.4.9.3.png)
![****](img/ch3/3.4.9.3.png)
In the case of softmax, the original output is $3,1,-3$, which is mapped to the value of $(0,1)$ by the softmax function, and the sum of these values is $1 $( Satisfy the nature of the probability), then we can understand it as a probability, when we finally select the output node, we can select the node with the highest probability (that is, the value corresponds to the largest) as our prediction target!
@ -668,7 +668,7 @@ At this time, a batch-grading learning method (Mini-batches Learning) can be emp
### 3.6.3 Why can normalization improve the solution speed?
![](./img/ch3/3.6.3.1.png)
![](img/ch3/3.6.3.1.png)
The above figure is the optimal solution finding process that represents whether the data is uniform (the circle can be understood as a contour). The left image shows the search process without normalization, and the right image shows the normalized search process.
@ -684,7 +684,7 @@ Suppose $w1$ ranges in $[-10, 10]$, while $w2$ ranges in $[-100, 100]$, the grad
This will result in a more bias toward the direction of $ w1 $ during the search. Go out of the "L" shape, or become the "Zigzag" shape.
![](./img/ch3/3-37.png)
![](img/ch3/3-37.png)
### 3.6.5 What types of normalization?
@ -742,7 +742,7 @@ among them,
A simple diagram is as follows:
![](./img/ch3/3.6.7.1.png)
![](img/ch3/3.6.7.1.png)
### 3.6.8 What is Batch Normalization?
@ -892,7 +892,7 @@ Deviation Initialization Trap: Both are initialized to the same value.
Take a three-layer network as an example:
First look at the structure
![](./img/ch3/3.8.2.1.png)
![](img/ch3/3.8.2.1.png)
Its expression is:
@ -1051,8 +1051,8 @@ tf.train.RMSPropOptimizer
### 3.12.2 Why is regularization helpful in preventing overfitting?
![](./img/ch3/3.12.2.1.png)
![](./img/ch3/3.12.2.2.png)
![](img/ch3/3.12.2.1.png)
![](img/ch3/3.12.2.2.png)
The left picture is high deviation, the right picture is high variance, and the middle is Just Right, which we saw in the previous lesson.

View File

@ -9,7 +9,7 @@ LeNet-5 is a Convolutional Neural Network (CNN) $^{[1]}$ proposed by $LeCun$ for
### 4.1.2 Model structure
![](./img/ch4/LeNet-5.jpg)
![](img/ch4/LeNet-5.jpg)
Figure 4.1 LeNet-5 network structure
@ -31,7 +31,7 @@ Table 4.1 LeNet-5 Network Parameter Configuration
>
> $^*$ $C_3$ Convolutional layer training parameters are not directly connected to all feature maps in $S_2$, but are connected using the sampling feature as shown in Figure 4.2 (sparse connection). The generated 16 channel feature maps are mapped according to the adjacent three feature maps, the adjacent four feature maps, the non-adjacent four feature maps, and all six feature maps. The calculated number of parameters is calculated as $6\ Times(25\times3+1)+6\times(25\times4+1)+3\times(25\times4+1)+1\times(25\times6+1)=1516$, explained in the original paper There are two reasons for using this sampling method: the number of connections is not too large (the computing power of the current year is weak); forcing the combination of different feature maps can make the mapped feature maps learn different feature patterns.
![FeatureMap](./img/ch4/featureMap.jpg)
![FeatureMap](img/ch4/featureMap.jpg)
Figure 4.2 Sparse connection between feature maps between $S_2$ and $C_3$
@ -53,7 +53,7 @@ AlexNet is the first deep convolutional neural network applied to image classifi
### 4.2.2 Model structure
![](./img/ch4/alexnet.png)
![](img/ch4/alexnet.png)
Figure 4.3 AlexNet network structure
@ -100,15 +100,15 @@ ZFNet is a large convolutional network based on AlexNet from $Matthew$ $D. Zeile
### 4.3.2 Model structure
![](./img/ch4/image21.jpeg)
![](img/ch4/image21.jpeg)
Figure 4.4 ZFNet network structure diagram (original structure diagram and AlexNet style structure diagram)
As shown in Figure 4.4, ZFNet is similar to AlexNet. It is a convolutional neural network consisting of 8 layers of networks, including 5 layers of convolutional layers and 3 layers of fully connected layers. The biggest difference between the two network architectures is that the ZFNet first-layer convolution replaces the convolution of the first-order convolution kernel $11\times11\times3/4$ in AlexNet with a convolution kernel of $7\times7\times3/2$. nuclear. In Figure 4.5, ZFNet contains more intermediate frequency information in the feature map of the first layer output than AlexNet, while the characteristic map of the first layer output of AlexNet is mostly low frequency or high frequency information, and the lack of intermediate frequency features leads to The characteristics of the subsequent network level as shown in Figure 4.5(c) are not detailed enough, and the root cause of this problem is that the convolution kernel and step size adopted by AlexNet in the first layer are too large.
![](./img/ch4/zfnet-layer1.png)
![](img/ch4/zfnet-layer1.png)
![](./img/ch4/zfnet-layer2.png)
![](img/ch4/zfnet-layer2.png)
Figure 4.5 (a) Characteristic map of the first layer output of ZFNet (b) Characteristic map of the first layer output of AlexNet (c) Characteristic map of the output of the second layer of AlexNet (d) Characteristic map of the output of the second layer of ZFNet
@ -148,7 +148,7 @@ NetwThe ork In Network (NIN) was proposed by $Min Lin$ et al. to achieve the bes
### 4.4.2 Model Structure
![](./img/ch4/image23.jpeg)
![](img/ch4/image23.jpeg)
Figure 4.6 NIN network structure
NIN consists of three layers of multi-layer perceptual convolutional layer (MLPConv Layer). Each layer of multi-layer perceptual convolutional layer is composed of several layers of local fully connected layers and nonlinear activation functions instead of traditional convolutional layers. Linear convolution kernel used. In network inference, the multi-layer perceptron calculates the local features of the input feature map, and the weights of the products corresponding to the local feature maps of each window are shared. The convolution operation is completely consistent, the biggest difference is that the multilayer perceptron performs a nonlinear mapping of local features, while the traditional convolution method is linear. NIN's network parameter configuration table 4.4 is shown (the original paper does not give the network parameters, the parameters in the table are the compiler combined network structure diagram and CIFAR-100 data set with $3\times3$ convolution as an example).
@ -181,7 +181,7 @@ VGGNet is a deep convolutional network structure proposed by the Visual Geometry
### 4.5.2 Model structure
![](./img/ch4/vgg16.png)
![](img/ch4/vgg16.png)
Figure 4.7 VGG16 network structure
@ -225,19 +225,19 @@ Table 4.5 VGG16 network parameter configuration
As the winner of the ILSVRC classification task in 2014, GoogLeNet pressured VGGNet and other models with an error rate of 6.65%. Compared with the previous two championships ZFNet and AlexNet, the accuracy of the classification is greatly improved. From the name **GoogLe**Net, you can know that this is a network structure designed by Google engineers, and the name Goog**LeNet** is a tribute to LeNet$^{[0]}$. The core part of GoogLeNet is its internal subnet structure, Inception, which is inspired by NIN and has undergone four iterations (Inception$_{v1-4}$).
![](./img/ch4/img_inception_01.png)
![](img/ch4/img_inception_01.png)
Figure 4.8 Inception performance comparison chart
### 4.6.2 Model Structure
![](./img/ch4/image25.jpeg)
![](img/ch4/image25.jpeg)
Figure 4.9 GoogLeNet network structure
As shown in Figure 4.9, GoogLeNet extends the width of the network in addition to the depth of the previous convolutional neural network structure. The entire network is composed of a number of block subnetworks. This subnet constitutes the Inception structure. Figure 4.9 shows four versions of Inception: $Inception_{v1}$ uses different convolution kernels in the same layer and merges the convolution results; $Inception_{v2}$ combines the stacking of different convolution kernels, and The convolution results are merged; $Inception_{v3}$ is a deep combination attempt on the basis of $v_2$; the $Inception_{v4} $ structure is more complex than the previous version, nested in the subnet The internet.
![](./img/ch4/img_inception_02.png)
![](./img/ch4/img_inception_05.png)
![](./img/ch4/img_inception_03.png)
![](./img/ch4/img_inception_04.png)
![](img/ch4/img_inception_02.png)
![](img/ch4/img_inception_05.png)
![](img/ch4/img_inception_03.png)
![](img/ch4/img_inception_04.png)
Figure 4.10 Inception$_{v1-4}$ structure diagram
Table 4.6 Inception$_{v1}$ Network Parameter Configuration in GoogLeNet

View File

@ -92,7 +92,7 @@
(进群先在MD版本增加、改善、提交内容后更易进群享受分享知识帮助他人。)
![](./qun23.png)
![](qun23.png)
3. Markdown阅读器推荐https://typora.io/ 免费且对于数学公式显示支持的比较好。

View File

@ -1 +0,0 @@
theme: jekyll-theme-time-machine

22
_sidebar.md Normal file
View File

@ -0,0 +1,22 @@
* [简介]()
* [1. 第一章 数学基础](ch01_数学基础/第一章_数学基础.md)
* [2. 第二章 机器学习基础](ch02_机器学习基础/第二章_机器学习基础.md)
* [3. 第三章 深度学习基础](ch03_深度学习基础/第三章_深度学习基础.md)
* [4. 第四章 经典网络](ch04_经典网络/第四章_经典网络.md)
* [5. 第五章 卷积神经网络(CNN)](ch05_卷积神经网络(CNN)/第五章_卷积神经网络(CNN).md)
* [6. 第六章 循环神经网络(RNN)](ch06_循环神经网络(RNN)/第六章_循环神经网络(RNN).md)
* [7. 第七章 生成对抗网络(GAN)](ch07_生成对抗网络(GAN)/ch7.md)
* [8. 第八章 目标检测](ch08_目标检测/第八章_目标检测.md)
* [9. 第九章 图像分割](ch09_图像分割/第九章_图像分割.md)
* [10. 第十章 强化学习](ch10_强化学习/第十章_强化学习.md)
* [11. 第十一章 迁移学习](ch11_迁移学习/第十一章_迁移学习.md)
* [12. 第十二章 网络搭建及训练](ch12_网络搭建及训练/第十二章_网络搭建及训练.md)
* [13. 第十三章 优化算法](ch13_优化算法/第十三章_优化算法.md)
* [14. 第十四章 超参数调整](ch14_超参数调整/第十四章_超参数调整.md)
* [15. 第十五章 异构运算、GPU及框架选型](ch15_GPU和框架选型/第十五章_异构运算、GPU及框架选型.md)
* [16. 第十六章 自然语言处理](ch16_自然语言处理(NLP)/第十六章_NLP.md)
* [17. 第十七章 模型压缩、加速及移动端部署](ch17_模型压缩、加速及移动端部署/第十七章_模型压缩、加速及移动端部署.md)
* [18. 第十八章 后端架构选型、离线及实时计算](ch18_后端架构选型、离线及实时计算/第十八章_后端架构选型、离线及实时计算.md)
* [19. 第十八章 后端架构选型及应用场景](ch18_后端架构选型及应用场景/第十八章_后端架构选型及应用场景.md)
* [20. 第十九章 软件专利申请及权利保护](ch19_软件专利申请及权利保护/第十九章_软件专利申请及权利保护.md)

View File

@ -313,7 +313,7 @@ $$
P(A|B) = P(A\cap B) / P(B)
$$
说明:在同一个样本空间$\Omega$中的事件或者子集$A$与$B$,如果随机从$\Omega$中选出的一个元素属于$B$,那么下一个随机选择的元素属于$A$ 的概率就定义为在$B$的前提下$A$的条件概率。条件概率文氏图示意如图1.1所示。
![条件概率](./img/ch1/conditional_probability.jpg)
![条件概率](img/ch1/conditional_probability.jpg)
图1.1 条件概率文氏图示意

View File

@ -28,7 +28,7 @@
**神经网络架构**
图2-1就是一个神经网络系统它由很多层组成。输入层负责接收信息比如一只猫的图片。输出层是计算机对这个输入信息的判断结果它是不是猫。隐藏层就是对输入信息的传递和加工处理。
![图2-2 神经网络系统](./img/ch2/2.5.1.png)
![图2-2 神经网络系统](img/ch2/2.5.1.png)
图2-1 神经网络系统
@ -38,19 +38,19 @@
| 回归算法 | 聚类算法 | 正则化方法 |
| :----------------------: | :----------------------: | :----------------------: |
| ![](./img/ch2/2.1/1.jpg) | ![](./img/ch2/2.1/2.jpg) | ![](./img/ch2/2.1/3.jpg) |
| ![](img/ch2/2.1/1.jpg) | ![](img/ch2/2.1/2.jpg) | ![](img/ch2/2.1/3.jpg) |
| 决策树学习 | 贝叶斯方法 | 基于核的算法 |
| :----------------------: | :----------------------: | :----------------------: |
| ![](./img/ch2/2.2.4.png) | ![](./img/ch2/2.1/5.jpg) | ![](./img/ch2/2.1/6.jpg) |
| ![](img/ch2/2.2.4.png) | ![](img/ch2/2.1/5.jpg) | ![](img/ch2/2.1/6.jpg) |
| 聚类算法 | 关联规则学习 | 人工神经网络 |
| :----------------------: | :----------------------: | :-----------------------: |
| ![](./img/ch2/2.1/7.jpg) | ![](./img/ch2/2.2.8.png) | ![](./img/ch2/2.2.09.png) |
| ![](img/ch2/2.1/7.jpg) | ![](img/ch2/2.2.8.png) | ![](img/ch2/2.2.09.png) |
| 深度学习 | 降低维度算法 | 集成算法 |
| :-----------------------: | :-----------------------: | :-----------------------: |
| ![](./img/ch2/2.2.10.png) | ![](./img/ch2/2.2.11.png) | ![](./img/ch2/2.2.12.png) |
| ![](img/ch2/2.2.10.png) | ![](img/ch2/2.2.11.png) | ![](img/ch2/2.2.12.png) |
图2-2 各种常见算法图示
@ -207,7 +207,7 @@ $$
表2-2 四个术语的混淆矩阵
![图2-3 术语的混淆矩阵](./img/ch2/2.9/1.png)
![图2-3 术语的混淆矩阵](img/ch2/2.9/1.png)
表2-2是这四个术语的混淆矩阵做以下说明
1P=TP+FN表示实际为正例的样本个数。
@ -253,7 +253,7 @@ $$
如图2-3ROC曲线是Receiver Operating Characteristic Curve受试者工作特征曲线的简称是以灵敏度真阳性率为纵坐标以1减去特异性假阳性率为横坐标绘制的性能评价曲线。可以将不同模型对同一数据集的ROC曲线绘制在同一笛卡尔坐标系中ROC曲线越靠近左上角说明其对应模型越可靠。也可以通过ROC曲线下面的面积Area Under Curve, AUC来评价模型AUC越大模型越可靠。
![](./img/ch2/2.7.3.png)
![](img/ch2/2.7.3.png)
图2-3 ROC曲线
@ -383,7 +383,7 @@ $$
### 2.10.2 代价函数作用原理
在回归问题中通过代价函数来求解最优解常用的是平方误差代价函数。假设函数图像如图2-4所示当参数发生变化时假设函数状态也会随着变化。
![](./img/ch2/2.16/1.jpg)
![](img/ch2/2.16/1.jpg)
图2-4 $h(x) = A + Bx$函数示意图
@ -396,7 +396,7 @@ $$
**最优解即为代价函数的最小值**$\min J(\theta_0, \theta_1)$。如果是1个参数代价函数一般通过二维曲线便可直观看出。如果是2个参数代价函数通过三维图像可看出效果参数越多越复杂。
当参数为2个时代价函数是三维图像如下图2-5所示。
![](./img/ch2/2.16/2.jpg)
![](img/ch2/2.16/2.jpg)
图2-5 代价函数三维图像
@ -424,7 +424,7 @@ $$
*注*神经网络常用的激活函数为sigmoid函数该函数的曲线如下图2-6所示
![](./img/ch2/2.18/1.jpg)
![](img/ch2/2.18/1.jpg)
图2-6 sigmoid函数曲线
@ -747,7 +747,7 @@ $$
### 2.12.3 梯度下降法直观理解
梯度下降法经典图示如下图2.7所示:
![](./img/ch2/2.25/1.png)
![](img/ch2/2.25/1.png)
图2.7 梯度下降法经典图示
@ -980,7 +980,7 @@ LDA分类思想简单总结如下
### 2.14.2 图解LDA核心思想
假设有红、蓝两类数据,这些数据特征均为二维,如下图所示。我们的目标是将这些数据投影到一维,让每一类相近的数据的投影点尽可能接近,不同类别数据尽可能远,即图中红色和蓝色数据中心之间的距离尽可能大。
![](./img/ch2/2.29/1.png)
![](img/ch2/2.29/1.png)
左图和右图是两种不同的投影方式。
@ -1078,7 +1078,7 @@ LDA算法降维流程如下
假设数据集是m个n维$(\boldsymbol x^{(1)}, \boldsymbol x^{(2)}, \cdots, \boldsymbol x^{(m)})$。如果$n=2$,需要降维到$n'=1$,现在想找到某一维度方向代表这两个维度的数据。下图有$u_1, u_2$两个向量方向,但是哪个向量才是我们所想要的,可以更好代表原始数据集的呢?
![](./img/ch2/2.34/1.png)
![](img/ch2/2.34/1.png)
从图可看出,$u_1$比$u_2$好,为什么呢?有以下两个主要评价指标:
1. 样本点到这个直线的距离足够近。
@ -1240,7 +1240,7 @@ $$
- Variance越小模型的泛化的能力越高反之模型的泛化的能力越低。
- 如果模型在训练集上拟合效果比较优秀,但是在测试集上拟合效果比较差劣,则方差较大,说明模型的稳定程度较差,出现这种现象可能是由于模型对训练集过拟合造成的。 如下图右列所示。
> ![](./img/ch2/2.16.20.1.png)
> ![](img/ch2/2.16.20.1.png)
>
### 2.16.3 经验误差与泛化误差
@ -1253,7 +1253,7 @@ $$
根据不同的坐标方式,欠拟合与过拟合图解不同。
1. **横轴为训练样本数量,纵轴为误差**
![](./img/ch2/2.16.4.1.jpg)
![](img/ch2/2.16.4.1.jpg)
如上图所示,我们可以直观看出欠拟合和过拟合的区别:
@ -1265,7 +1265,7 @@ $$
2. **横轴为模型复杂程度,纵轴为误差**
![](./img/ch2/2.16.4.2.png)
![](img/ch2/2.16.4.2.png)
红线为测试集上的Error,蓝线为训练集上的Error
@ -1277,7 +1277,7 @@ $$
3. **横轴为正则项系数,纵轴为误差**
![](./img/ch2/2.16.4.3.png)
![](img/ch2/2.16.4.3.png)
红线为测试集上的Error,蓝线为训练集上的Error
@ -1372,7 +1372,7 @@ $$
对于分类器或者说分类算法评价指标主要有PrecisionRecallF-score。下图是一个ROC曲线的示例。
![](./img/ch2/2.40.10/1.png)
![](img/ch2/2.40.10/1.png)
ROC曲线的横坐标为False Positive RateFPR纵坐标为True Positive RateTPR。其中
$$
@ -1397,7 +1397,7 @@ $$
3、每次选取一个不同的threshold得到一组FPR和TPR即ROC曲线上的一点。以此共得到20组FPR和TPR的值。
4、根据3、中的每个坐标点画图。
![](./img/ch2/2.40.11/1.jpg)
![](img/ch2/2.40.11/1.jpg)
### 2.16.13 如何计算TPRFPR
1、分析数据
@ -1478,26 +1478,26 @@ TPR = TP/(TP+FN) = 0.5 FPR = FP/(TN+FP) = 0
### 2.16.16 直观理解AUC
下图展现了三种AUC的值
![](./img/ch2/2.40.15/1.png)
![](img/ch2/2.40.15/1.png)
AUC是衡量二分类模型优劣的一种评价指标表示正例排在负例前面的概率。其他评价指标有精确度、准确率、召回率而AUC比这三者更为常用。
一般在分类模型中,预测结果都是以概率的形式表现,如果要计算准确率,通常都会手动设置一个阈值来将对应的概率转化成类别,这个阈值也就很大程度上影响了模型准确率的计算。
举例:
现在假设有一个训练好的二分类器对10个正负样本正例5个负例5个预测得分按高到低排序得到的最好预测结果为[1, 1, 1, 1, 1, 0, 0, 0, 0, 0]即5个正例均排在5个负例前面正例排在负例前面的概率为100%。然后绘制其ROC曲线由于是10个样本除去原点我们需要描10个点如下
![](./img/ch2/2.16.17-1.png)
![](img/ch2/2.16.17-1.png)
描点方式按照样本预测结果的得分高低从左至右开始遍历。从原点开始每遇到1便向y轴正方向移动y轴最小步长1个单位这里是1/5=0.2每遇到0则向x轴正方向移动x轴最小步长1个单位这里也是0.2。不难看出上图的AUC等于1印证了正例排在负例前面的概率的确为100%。
假设预测结果序列为[1, 1, 1, 1, 0, 1, 0, 0, 0, 0]。
![](./img/ch2/2.16.17-2.png)
![](img/ch2/2.16.17-2.png)
计算上图的AUC为0.96与计算正例与排在负例前面的概率0.8 × 1 + 0.2 × 0.8 = 0.96相等而左上角阴影部分的面积则是负例排在正例前面的概率0.2 × 0.2 = 0.04。
假设预测结果序列为[1, 1, 1, 0, 1, 0, 1, 0, 0, 0]。
![](./img/ch2/2.16.17-3.png)
![](img/ch2/2.16.17-3.png)
计算上图的AUC为0.88与计算正例与排在负例前面的概率0.6 × 1 + 0.2 × 0.8 + 0.2 × 0.6 = 0.88相等左上角阴影部分的面积是负例排在正例前面的概率0.2 × 0.2 × 3 = 0.12。
@ -1505,7 +1505,7 @@ TPR = TP/(TP+FN) = 0.5 FPR = FP/(TN+FP) = 0
不同的错误会产生不同代价。以二分法为例,设置代价矩阵如下:
![](./img/ch2/2-1.png)
![](img/ch2/2-1.png)
当判断正确的时候值为0不正确的时候分别为$Cost_{01}$和$Cost_{10}$ 。
@ -1539,7 +1539,7 @@ $$
例如ROC上(TPR,FPR),计算出FNR=1-TPR在代价平面上绘制一条从(0,FPR)到(1,FNR)的线段,面积则为该条件下期望的总体代价。所有线段下界面积,所有条件下学习器的期望总体代价。
![](./img/ch2/2.16.18.1.png)
![](img/ch2/2.16.18.1.png)
### 2.16.18 模型有哪些比较检验方法
正确性分析:模型稳定性分析,稳健性分析,收敛性分析,变化趋势分析,极值分析等。
@ -1630,7 +1630,7 @@ $$
### 2.17.3 决策树学习基本算法
![](./img/ch2/2-5.png)
![](img/ch2/2-5.png)
### 2.17.4 决策树算法优缺点
@ -1711,7 +1711,7 @@ $$
在一个二维环境中其中点RSG点和其它靠近中间黑线的点可以看作为支持向量它们可以决定分类器即黑线的具体参数。
![](./img/ch2/2-6.png)
![](img/ch2/2-6.png)
支持向量机是一种二分类模型,它的目的是寻找一个超平面来对样本进行分割,分割的原则是边界最大化,最终转化为一个凸二次规划问题来求解。由简至繁的模型包括:
@ -1913,7 +1913,7 @@ $$
极大似然估计的原理,用一张图片来说明,如下图所示:
![](./img/ch2/2.19.1.1.png)
![](img/ch2/2.19.1.1.png)
有两个外形完全相同的箱子1号箱有99只白球1只黑球2号箱有1只白球99只黑球。在一次实验中取出的是黑球请问是从哪个箱子中取出的
@ -2174,7 +2174,7 @@ $$
考虑上一节中的a表达式中存在隐变量直接找到参数估计比较困难通过EM算法迭代求解下界的最大值到收敛为止。
![](./img/ch2/2.20.1.jpg)
![](img/ch2/2.20.1.jpg)
图片中的紫色部分是我们的目标模型$p(x|\theta)$,该模型复杂,难以求解析解,为了消除隐变量$z^{(i)}$的影响,我们可以选择一个不包含$z^{(i)}$的模型$r(x|\theta)$,使其满足条件$r(x|\theta) \leqslant p(x|\theta) $。
@ -2217,23 +2217,23 @@ $$
![](./img/ch2/2.21.1.1.png)
![](img/ch2/2.21.1.1.png)
图2.21.1.a
从上图可看到如果仅仅只有一个特征进行分类三角形和圆几乎是均匀分布在这条线段上很难将10张照片线性分类。那么增加一个特征后的情况会怎么样
![](./img/ch2/2.21.1.2.png)
![](img/ch2/2.21.1.2.png)
图2.21.1.b
增加一个特征后,我们发现仍然无法找到一条直线将猫和狗分开。所以,考虑需要再增加一个特征:
![](./img/ch2/2.21.1.3.png)
![](img/ch2/2.21.1.3.png)
图2.21.1.c
![](./img/ch2/2.21.1.4.png)
![](img/ch2/2.21.1.4.png)
图2.21.1.d
@ -2251,25 +2251,25 @@ $$
下面看一下将高维空间的分类结果映射到低维空间时,会出现什么情况?
![](./img/ch2/2.21.1.5.png)
![](img/ch2/2.21.1.5.png)
图2.21.1.e
上图是将三维特征空间映射到二维特征空间后的结果。尽管在高维特征空间时训练样本线性可分,但是映射到低维空间后,结果正好相反。事实上,增加特征数量使得高维空间线性可分,相当于在低维空间内训练一个复杂的非线性分类器。不过,这个非线性分类器太过“聪明”,仅仅学到了一些特例。如果将其用来辨别那些未曾出现在训练样本中的测试样本时,通常结果不太理想,会造成过拟合问题。
![](./img/ch2/2.21.1.6a.png)
![](img/ch2/2.21.1.6a.png)
图2.21.1.f
上图所示的只采用2个特征的线性分类器分错了一些训练样本准确率似乎没有图2.21.1.e的高但是采用2个特征的线性分类器的泛化能力比采用3个特征的线性分类器要强。因为采用2个特征的线性分类器学习到的不只是特例而是一个整体趋势对于那些未曾出现过的样本也可以比较好地辨别开来。换句话说通过减少特征数量可以避免出现过拟合问题从而避免“维数灾难”。
![](./img/ch2/2.21.1.6.png)
![](img/ch2/2.21.1.6.png)
上图从另一个角度诠释了“维数灾难”。假设只有一个特征时特征的值域是0到1每一个三角形和圆的特征值都是唯一的。如果我们希望训练样本覆盖特征值值域的20%那么就需要三角形和圆总数的20%。我们增加一个特征后为了继续覆盖特征值值域的20%就需要三角形和圆总数的45%($0.452^2\approx0.2$)。继续增加一个特征后需要三角形和圆总数的58%($0.583^3\approx0.2$)。随着特征数量的增加为了覆盖特征值值域的20%,就需要更多的训练样本。如果没有足够的训练样本,就可能会出现过拟合问题。
通过上述例子,我们可以看到特征数量越多,训练样本就会越稀疏,分类器的参数估计就会越不准确,更加容易出现过拟合问题。“维数灾难”的另一个影响是训练样本的稀疏性并不是均匀分布的。处于中心位置的训练样本比四周的训练样本更加稀疏。
![](./img/ch2/2.21.1.7.png)
![](img/ch2/2.21.1.7.png)
假设有一个二维特征空间如上图所示的矩形在矩形内部有一个内切的圆形。由于越接近圆心的样本越稀疏因此相比于圆形内的样本那些位于矩形四角的样本更加难以分类。当维数变大时特征超空间的容量不变但单位圆的容量会趋于0在高维空间中大多数训练数据驻留在特征超空间的角落。散落在角落的数据要比处于中心的数据难于分类。
@ -2291,13 +2291,13 @@ Lassio缩减系数法、小波分析法、
1在一些推荐系统中需确定新用户的类型但定义“用户类型”却可能不太容易此时往往可先对原有的用户数据进行聚类根据聚类结果将每个簇定义为一个类,然后再基于这些类训练分类模型,用于判别新用户的类型。
![](./img/ch2/2.21.3.1.png)
![](img/ch2/2.21.3.1.png)
2而降维则是为了缓解维数灾难的一个重要方法就是通过某种数学变换将原始高维属性空间转变为一个低维“子空间”。其基于的假设就是虽然人们平时观测到的数据样本虽然是高维的但是实际上真正与学习任务相关的是个低维度的分布。从而通过最主要的几个特征维度就可以实现对数据的描述对于后续的分类很有帮助。比如对于Kaggle数据分析竞赛平台之一上的泰坦尼克号生还问题。通过给定一个乘客的许多特征如年龄、姓名、性别、票价等来判断其是否能在海难中生还。这就需要首先进行特征筛选从而能够找出主要的特征让学习到的模型有更好的泛化性。
聚类和降维都可以作为分类等问题的预处理步骤。
![](./img/ch2/2-19.jpg)
![](img/ch2/2-19.jpg)
但是他们虽然都能实现对数据的约减。但是二者适用的对象不同聚类针对的是数据点而降维则是对于数据的特征。另外它们有着很多种实现方法。聚类中常用的有K-means、层次聚类、基于密度的聚类等降维中常用的则PCA、Isomap、LLE等。

View File

@ -14,7 +14,7 @@
简单的感知机如下图所示:
![](./img/ch3/3-1.png)
![](img/ch3/3-1.png)
其中$x_1$$x_2$$x_3$为感知机的输入,其输出为:
@ -46,30 +46,30 @@ $$
设置合适的 $\boldsymbol{x}$ 和 $b$ ,一个简单的感知机单元的与非门表示如下:
![](./img/ch3/3-2.png)
![](img/ch3/3-2.png)
当输入为 $0$$1$ 时,感知机输出为 $ 0 \times (-2) + 1 \times (-2) + 3 = 1$。
复杂一些的感知机由简单的感知机单元组合而成:
![](./img/ch3/3-3.png)
![](img/ch3/3-3.png)
**多层感知机**
多层感知机由感知机推广而来,最主要的特点是有多个神经元层,因此也叫深度神经网络。相比于单独的感知机,多层感知机的第 $ i $ 层的每个神经元和第 $ i-1 $ 层的每个神经元都有连接。
![](./img/ch3/3.1.1.5.png)
![](img/ch3/3.1.1.5.png)
输出层可以不止有$ 1$ 个神经元。隐藏层可以只有$ 1$ 层,也可以有多层。输出层为多个神经元的神经网络例如下图所示:
![](./img/ch3/3.1.1.6.png)
![](img/ch3/3.1.1.6.png)
### 3.1.2 神经网络有哪些常用模型结构?
下图包含了大部分常用的模型:
![](./img/ch3/3-7.jpg)
![](img/ch3/3-7.jpg)
### 3.1.3 如何选择深度学习开发平台?
@ -108,7 +108,7 @@ $$
梯度消失的原因受到多种因素影响,例如学习率的大小,网络参数的初始化,激活函数的边缘效应等。在深层神经网络中,每一个神经元计算得到的梯度都会传递给前一层,较浅层的神经元接收到的梯度受到之前所有层梯度的影响。如果计算得到的梯度值非常小,随着层数增多,求出的梯度更新信息将会以指数形式衰减,就会发生梯度消失。下图是不同隐含层的学习速率:
![](./img/ch3/3-8.png)
![](img/ch3/3-8.png)
2. 梯度爆炸
在深度网络或循环神经网络Recurrent Neural Network, RNN等网络结构中梯度可在网络更新的过程中不断累积变成非常大的梯度导致网络权重值的大幅更新使得网络不稳定在极端情况下权重值甚至会溢出变为$NaN$值,再也无法更新。
@ -117,7 +117,7 @@ $$
参数空间中学习的退化速度减慢,导致减少了模型的有效维数,网络的可用自由度对学习中梯度范数的贡献不均衡,随着相乘矩阵的数量(即网络深度)的增加,矩阵的乘积变得越来越退化。在有硬饱和边界的非线性网络中(例如 ReLU 网络随着深度增加退化过程会变得越来越快。Duvenaud等人2014年的论文里展示了关于该退化过程的可视化
![](./img/ch3/3-9.jpg)
![](img/ch3/3-9.jpg)
随着深度的增加,输入空间(左上角所示)会在输入空间中的每个点处被扭曲成越来越细的单丝,只有一个与细丝正交的方向影响网络的响应。沿着这个方向,网络实际上对变化变得非常敏感。
@ -131,9 +131,9 @@ $$
![](./img/ch3/3.1.6.1.png)
![](img/ch3/3.1.6.1.png)
![](./img/ch3/3-11.jpg)
![](img/ch3/3-11.jpg)
## 3.2 网络操作与计算
@ -143,7 +143,7 @@ $$
**前向传播**
![](./img/ch3/3.2.1.1.png)
![](img/ch3/3.2.1.1.png)
假设上一层结点 $ i,j,k,... $ 等一些结点与本层的结点 $ w $ 有连接,那么结点 $ w $ 的值怎么算呢?就是通过上一层的 $ i,j,k,... $ 等结点以及对应的连接权值进行加权和运算,最终结果再加上一个偏置项(图中为了简单省略了),最后在通过一个非线性函数(即激活函数),如 $ReLu$$sigmoid$ 等函数,最后得到的结果就是本层结点 $ w $ 的输出。
@ -151,7 +151,7 @@ $$
**反向传播**
![](./img/ch3/3.2.1.2.png)
![](img/ch3/3.2.1.2.png)
由于我们前向传播最终得到的结果,以分类为例,最终总是有误差的,那么怎么减少误差呢,当前应用广泛的一个算法就是梯度下降算法,但是求梯度就要求偏导数,下面以图中字母为例讲解一下:
@ -159,7 +159,7 @@ $$
### 3.2.2 如何计算神经网络的输出?
![](./img/ch3/3.2.2.1.png)
![](img/ch3/3.2.2.1.png)
如上图,输入层有三个节点,我们将其依次编号为 1、2、3隐藏层的 4 个节点,编号依次为 4、5、6、7最后输出层的两个节点编号为 8、9。比如隐藏层的节点 4它和输入层的三个节点 1、2、3 之间都有连接,其连接上的权重分别为是 $ w_{41}, w_{42}, w_{43} $。
@ -187,7 +187,7 @@ $$
假设有一个 5\*5 的图像,使用一个 3\*3 的 filter 进行卷积,想得到一个 3\*3 的 Feature Map如下所示
![](./img/ch3/3.2.3.1.png)
![](img/ch3/3.2.3.1.png)
$ x_{i,j} $ 表示图像第 $ i $ 行第 $ j $ 列元素。$ w_{m,n} $ 表示 filter 第 $ m $ 行第 $ n $ 列权重。 $ w_b $ 表示 $filter$ 的偏置项。 表$a_i,_j$示 feature map 第 $ i$ 行第 $ j $ 列元素。 $f$ 表示激活函数,这里以$ ReLU$ 函数为例。
@ -211,15 +211,15 @@ $$
其计算过程图示如下:
![](./img/ch3/3.2.3.2.png)
![](img/ch3/3.2.3.2.png)
以此类推计算出全部的Feature Map。
![](./img/ch3/3.2.3.4.png)
![](img/ch3/3.2.3.4.png)
当步幅为 2 时Feature Map计算如下
![](./img/ch3/3.2.3.5.png)
![](img/ch3/3.2.3.5.png)
图像大小、步幅和卷积后的Feature Map大小是有关系的。它们满足下面的关系
@ -252,7 +252,7 @@ $$
每个卷积层可以有多个 filter。每个 filter 和原始图像进行卷积后,都可以得到一个 Feature Map。卷积后 Feature Map 的深度(个数)和卷积层的 filter 个数相同。下面的图示显示了包含两个 filter 的卷积层的计算。$7*7*3$ 输入,经过两个 $3*3*3$ filter 的卷积(步幅为 $2$),得到了 $3*3*2$ 的输出。图中的 Zero padding 是 $1$,也就是在输入元素的周围补了一圈 $0$。
![](./img/ch3/3.2.3.6.png)
![](img/ch3/3.2.3.6.png)
以上就是卷积层的计算方法。这里面体现了局部连接和权值共享:每层神经元只和上一层部分神经元相连(卷积计算规则),且 filter 的权值对于上一层所有神经元都是一样的。对于包含两个 $ 3 * 3 * 3 $ 的 fitler 的卷积层来说,其参数数量仅有 $ (3 * 3 * 3+1) * 2 = 56 $ 个,且参数数量与上一层神经元个数无关。与全连接神经网络相比,其参数数量大大减少了。
@ -260,7 +260,7 @@ $$
Pooling 层主要的作用是下采样,通过去掉 Feature Map 中不重要的样本进一步减少参数数量。Pooling 的方法很多,最常用的是 Max Pooling。Max Pooling 实际上就是在 n\*n 的样本中取最大值,作为采样后的样本值。下图是 2\*2 max pooling
![](./img/ch3/3.2.4.1.png)
![](img/ch3/3.2.4.1.png)
除了 Max Pooing 之外,常用的还有 Average Pooling ——取各样本的平均值。
对于深度为 $ D $ 的 Feature Map各层独立做 Pooling因此 Pooling 后的深度仍然为 $ D $。
@ -269,7 +269,7 @@ $$
一个典型的三层神经网络如下所示:
![](./img/ch3/3.2.5.1.png)
![](img/ch3/3.2.5.1.png)
其中 Layer $ L_1 $ 是输入层Layer $ L_2 $ 是隐含层Layer $ L_3 $ 是输出层。
@ -279,11 +279,11 @@ $$
假设有如下的网络层:
![](./img/ch3/3.2.5.2.png)
![](img/ch3/3.2.5.2.png)
输入层包含神经元 $ i_1, i_2 $,偏置 $ b_1 $;隐含层包含神经元 $ h_1, h_2 $,偏置 $ b_2 $,输出层为 $ o_1, o_2 $$ w_i $ 为层与层之间连接的权重,激活函数为 $sigmoid$ 函数。对以上参数取初始值,如下图所示:
![](./img/ch3/3.2.5.3.png)
![](img/ch3/3.2.5.3.png)
其中:
@ -364,7 +364,7 @@ $$
下面的图可以更直观的看清楚误差是怎样反向传播的:
![](./img/ch3/3.2.5.4.png)
![](img/ch3/3.2.5.4.png)
### 3.2.6 神经网络更“深”有什么意义?
@ -436,7 +436,7 @@ $$
函数图像如下:
![](./img/ch3/3-26.png)
![](img/ch3/3-26.png)
2. tanh激活函数
@ -444,7 +444,7 @@ $$
函数图像如下:
![](./img/ch3/3-27.png)
![](img/ch3/3-27.png)
3. Relu激活函数
@ -452,7 +452,7 @@ $$
函数图像如下:
![](./img/ch3/3-28.png)
![](img/ch3/3-28.png)
4. Leak Relu 激活函数
@ -465,7 +465,7 @@ $$
图像如下($ a = 0.5 $
![](./img/ch3/3-29.png)
![](img/ch3/3-29.png)
5. SoftPlus 激活函数
@ -473,7 +473,7 @@ $$
函数图像如下:
![](./img/ch3/3-30.png)
![](img/ch3/3-30.png)
6. softmax 函数
@ -528,7 +528,7 @@ $$
Relu 激活函数图像如下:
![](./img/ch3/3-32.png)
![](img/ch3/3-32.png)
根据图像可看出具有如下特点:
@ -574,15 +574,15 @@ $$
从下图看,神经网络中包含了输入层,然后通过两个特征层处理,最后通过 softmax 分析器就能得到不同条件下的概率,这里需要分成三个类别,最终会得到 $ y=0, y=1, y=2 $ 的概率值。
![](./img/ch3/3.4.9.1.png)
![](img/ch3/3.4.9.1.png)
继续看下面的图,三个输入通过 softmax 后得到一个数组 $ [0.05 , 0.10 , 0.85] $,这就是 soft 的功能。
![](./img/ch3/3.4.9.2.png)
![](img/ch3/3.4.9.2.png)
更形象的映射过程如下图所示:
![****](./img/ch3/3.4.9.3.png)
![****](img/ch3/3.4.9.3.png)
softmax 直白来说就是将原来输出是 $ 3,1,-3 $ 通过 softmax 函数一作用,就映射成为 $ (0,1) $ 的值,而这些值的累和为 $ 1 $(满足概率的性质),那么我们就可以将它理解成概率,在最后选取输出结点的时候,我们就可以选取概率最大(也就是值对应最大的)结点,作为我们的预测目标!
@ -734,7 +734,7 @@ Batch的选择首先决定的是下降的方向。
### 3.6.3 为什么归一化能提高求解最优解速度?
![](./img/ch3/3.6.3.1.png)
![](img/ch3/3.6.3.1.png)
上图是代表数据是否均一化的最优解寻解过程(圆圈可以理解为等高线)。左图表示未经归一化操作的寻解过程,右图表示经过归一化后的寻解过程。
@ -750,7 +750,7 @@ Batch的选择首先决定的是下降的方向。
这样会导致,在搜索过程中更偏向于 $ w1 $ 的方向。走出了“L”形状或者成为“之”字形。
![](./img/ch3/3-37.png)
![](img/ch3/3-37.png)
### 3.6.5 归一化有哪些类型?
@ -808,7 +808,7 @@ $$
简单的示意图如下:
![](./img/ch3/3.6.7.1.png)
![](img/ch3/3.6.7.1.png)
### 3.6.8 什么是批归一化Batch Normalization
@ -958,7 +958,7 @@ $$
以一个三层网络为例:
首先看下结构
![](./img/ch3/3.8.2.1.png)
![](img/ch3/3.8.2.1.png)
它的表达式为:
@ -1053,7 +1053,7 @@ $$
分段常数衰减需要事先定义好的训练次数区间,在对应区间置不同的学习率的常数值,一般情况刚开始的学习率要大一些,之后要越来越小,要根据样本量的大小设置区间的间隔大小,样本量越大,区间间隔要小一点。下图即为分段常数衰减的学习率变化图,横坐标代表训练次数,纵坐标代表学习率。
![](./img/ch3/learnrate1.png)
![](img/ch3/learnrate1.png)
### 3.9.4 指数衰减
@ -1064,7 +1064,7 @@ $$
这种衰减方式简单直接,收敛速度快,是最常用的学习率衰减方式,如下图所示,绿色的为学习率随
训练次数的指数衰减方式,红色的即为分段常数衰减,它在一定的训练区间内保持学习率不变。
![](./img/ch3/learnrate2.png)
![](img/ch3/learnrate2.png)
### 3.9.5 自然指数衰减
@ -1075,7 +1075,7 @@ decayed{\_}learning{\_}rate =learning{\_}rate*e^{\frac{-decay{\_rate}}{global{\_
$$
下图为为分段常数衰减、指数衰减、自然指数衰减三种方式的对比图,红色的即为分段常数衰减图,阶梯型曲线。蓝色线为指数衰减图,绿色即为自然指数衰减图,很明可以看到自然指数衰减方式下的学习率衰减程度要大于一般指数衰减方式,有助于更快的收敛。
![](./img/ch3/learnrate3.png)
![](img/ch3/learnrate3.png)
### 3.9.6 多项式衰减
@ -1096,7 +1096,7 @@ decay{\_}steps = decay{\_}steps*ceil \left( \frac{global{\_}step}{decay{\_}steps
$$
如下图所示,红色线代表学习率降低至最低后,一直保持学习率不变进行更新,绿色线代表学习率衰减到最低后,又会再次循环往复的升高降低。
![](./img/ch3/learnrate4.png)
![](img/ch3/learnrate4.png)
### 3.9.7 余弦衰减
@ -1119,7 +1119,7 @@ $$
如下图所示,红色即为标准的余弦衰减曲线,学习率从初始值下降到最低学习率后保持不变。蓝色的线是线性余弦衰减方式曲线,它是学习率从初始学习率以线性的方式下降到最低学习率值。绿色噪声线性余弦衰减方式。
![](./img/ch3/learnrate5.png)
![](img/ch3/learnrate5.png)
## 3.12 Dropout 系列问题
@ -1129,8 +1129,8 @@ $$
### 3.12.2 为什么正则化有利于预防过拟合?
![](./img/ch3/3.12.2.1.png)
![](./img/ch3/3.12.2.2.png)
![](img/ch3/3.12.2.1.png)
![](img/ch3/3.12.2.2.png)
左图是高偏差右图是高方差中间是Just Right这几张图我们在前面课程中看到过。

View File

@ -9,7 +9,7 @@
### 4.1.2 模型结构
![](./img/ch4/image1.png)
![](img/ch4/image1.png)
图4.1 LeNet-5网络结构图
@ -31,7 +31,7 @@
>
> $^*$ $C_3$卷积层可训练参数并未直接连接$S_2$中所有的特征图Feature Map而是采用如图4.2所示的采样特征方式进行连接稀疏连接生成的16个通道特征图中分别按照相邻3个特征图、相邻4个特征图、非相邻4个特征图和全部6个特征图进行映射得到的参数个数计算公式为$6\times(25\times3+1)+6\times(25\times4+1)+3\times(25\times4+1)+1\times(25\times6+1)=1516$,在原论文中解释了使用这种采样方式原因包含两点:限制了连接数不至于过大(当年的计算能力比较弱);强制限定不同特征图的组合可以使映射得到的特征图学习到不同的特征模式。
![FeatureMap](./img/ch4/featureMap.jpg)
![FeatureMap](img/ch4/featureMap.jpg)
图4.2 $S_2$与$C_3$之间的特征图稀疏连接
@ -53,7 +53,7 @@
### 4.2.2 模型结构
![](./img/ch4/alexnet.png)
![](img/ch4/alexnet.png)
图4.3 AlexNet网络结构图
@ -100,17 +100,17 @@
### 4.3.2 模型结构
![](./img/ch4/image21.png)
![](img/ch4/image21.png)
![](./img/ch4/image21.jpeg)
![](img/ch4/image21.jpeg)
图4.4 ZFNet网络结构图原始结构图与AlexNet风格结构图
如图4.4所示ZFNet与AlexNet类似都是由8层网络组成的卷积神经网络其中包含5层卷积层和3层全连接层。两个网络结构最大的不同在于ZFNet第一层卷积采用了$7\times7\times3/2$的卷积核替代了AlexNet中第一层卷积核$11\times11\times3/4$的卷积核。图4.5中ZFNet相比于AlexNet在第一层输出的特征图中包含更多中间频率的信息而AlexNet第一层输出的特征图大多是低频或高频的信息对中间频率特征的缺失导致后续网络层次如图4.5c能够学习到的特征不够细致而导致这个问题的根本原因在于AlexNet在第一层中采用的卷积核和步长过大。
![](./img/ch4/zfnet-layer1.png)
![](img/ch4/zfnet-layer1.png)
![](./img/ch4/zfnet-layer2.png)
![](img/ch4/zfnet-layer2.png)
图4.5 aZFNet第一层输出的特征图bAlexNet第一层输出的特征图cAlexNet第二层输出的特征图dZFNet第二层输出的特征图
@ -150,7 +150,7 @@
### 4.4.2 模型结构
![](./img/ch4/image23.png)
![](img/ch4/image23.png)
图 4.6 NIN网络结构图
NIN由三层的多层感知卷积层MLPConv Layer构成每一层多层感知卷积层内部由若干层的局部全连接层和非线性激活函数组成代替了传统卷积层中采用的线性卷积核。在网络推理inference这个多层感知器会对输入特征图的局部特征进行划窗计算并且每个划窗的局部特征图对应的乘积的权重是共享的这两点是和传统卷积操作完全一致的最大的不同在于多层感知器对局部特征进行了非线性的映射而传统卷积的方式是线性的。NIN的网络参数配置表4.4所示原论文并未给出网络参数表中参数为编者结合网络结构图和CIFAR-100数据集以$3\times3$卷积为例给出)。
@ -183,7 +183,7 @@
### 4.5.2 模型结构
![](./img/ch4/vgg16.png)
![](img/ch4/vgg16.png)
图 4.7 VGG16网络结构图
@ -228,40 +228,40 @@
GoogLeNet作为2014年ILSVRC在分类任务上的冠军以6.65%的错误率力压VGGNet等模型在分类的准确率上面相比过去两届冠军ZFNet和AlexNet都有很大的提升。从名字**GoogLe**Net可以知道这是来自谷歌工程师所设计的网络结构而名字中Goog**LeNet**更是致敬了LeNet$^{[0]}$。GoogLeNet中最核心的部分是其内部子网络结构Inception该结构灵感来源于NIN至今已经经历了四次版本迭代Inception$_{v1-4}$)。
![](./img/ch4/img_inception_01.png)
![](img/ch4/img_inception_01.png)
图 4.8 Inception性能比较图
### 4.6.2 模型结构
![](./img/ch4/image25.jpeg)
![](img/ch4/image25.jpeg)
图 4.9 GoogLeNet网络结构图
如图4.9中所示GoogLeNet相比于以前的卷积神经网络结构除了在深度上进行了延伸还对网络的宽度进行了扩展整个网络由许多块状子网络的堆叠而成这个子网络构成了Inception结构。图4.9为Inception的四个版本$Inception_{v1}$在同一层中采用不同的卷积核,并对卷积结果进行合并;$Inception_{v2}$组合不同卷积核的堆叠形式,并对卷积结果进行合并;$Inception_{v3}$则在$v_2$基础上进行深度组合的尝试;$Inception_{v4}$结构相比于前面的版本更加复杂,子网络中嵌套着子网络。
$Inception_{v1}$
![](./img/ch4/image27.png)
![](img/ch4/image27.png)
![](./img/ch4/image28.png)
![](img/ch4/image28.png)
$Inception_{v2}$
![](./img/ch4/image34.png)
![](img/ch4/image34.png)
![](./img/ch4/image36.png)
![](img/ch4/image36.png)
![](./img/ch4/image38.png)
![](img/ch4/image38.png)
$Inception_{v3}$
![](./img/ch4/image37.png)
![](img/ch4/image37.png)
$Inception_{v4}$
![](./img/ch4/image46.png)
![](img/ch4/image46.png)
![](./img/ch4/image47.png)
![](img/ch4/image47.png)
![](./img/ch4/image63.png)
![](img/ch4/image63.png)
图 4.10 Inception$_{v1-4}$结构图

View File

@ -30,7 +30,7 @@
### 5.1.2 卷积层
卷积层(Convolution Layer)通常用作对输入层输入数据进行特征提取通过卷积核矩阵对原始数据中隐含关联性的一种抽象。卷积操作原理上其实是对两张像素矩阵进行点乘求和的数学操作其中一个矩阵为输入的数据矩阵另一个矩阵则为卷积核滤波器或特征矩阵求得的结果表示为原始图像中提取的特定局部特征。图5.1表示卷积操作过程中的不同填充策略,上半部分采用零填充,下半部分采用有效卷积(舍弃不能完整运算的边缘部分)。
![conv-same](img/ch5/convolution.png)
![conv-same](img/ch5/convolution.png)
图5.1 卷积操作示意图
### 5.1.3 激活层
@ -67,12 +67,12 @@ $$
| 卷积作用 | 卷积核 | 卷积后图像 |
| :----------------------: | :----------------------------------------------------------: | :-----------------------------------------------: |
| 输出原图 | $\begin{bmatrix} 0 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 0 \end{bmatrix}$ | ![origin_img](./img/ch5/cat.jpg) |
| 边缘检测(突出边缘差异) | $\begin{bmatrix} 1 & 0 & -1 \\ 0 & 0 & 0 \\ -1 & 0 & 1 \end{bmatrix}$ | ![edgeDetect-1](./img/ch5/cat-edgeDetect.jpg) |
| 边缘检测(突出中间值) | $\begin{bmatrix} -1 & -1 & -1 \\ -1 & 8 & -1 \\ -1 & -1 & -1 \end{bmatrix}$ | ![edgeDetect-2](./img/ch5/cat-edgeDetect-2.jpg) |
| 图像锐化 | $\begin{bmatrix} 0 & -1 & 0 \\ -1 & 5 & -1 \\ 0 & -1 & 0 \end{bmatrix}$ | ![sharpen_img](./img/ch5/cat-sharpen.jpg) |
| 方块模糊 | $\begin{bmatrix} 1 & 1 & 1 \\ 1 & 1 & 1 \\ 1 & 1 & 1 \end{bmatrix} \times \frac{1}{9}$ | ![box_blur](./img/ch5/cat-boxblur.jpg) |
| 高斯模糊 | $\begin{bmatrix} 1 & 2 & 1 \\ 2 & 4 & 2 \\ 1 & 2 & 1 \end{bmatrix} \times \frac{1}{16}$ | ![gaussian_blur](./img/ch5/cat-blur-gaussian.jpg) |
| 输出原图 | $\begin{bmatrix} 0 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 0 \end{bmatrix}$ | ![origin_img](img/ch5/cat.jpg) |
| 边缘检测(突出边缘差异) | $\begin{bmatrix} 1 & 0 & -1 \\ 0 & 0 & 0 \\ -1 & 0 & 1 \end{bmatrix}$ | ![edgeDetect-1](img/ch5/cat-edgeDetect.jpg) |
| 边缘检测(突出中间值) | $\begin{bmatrix} -1 & -1 & -1 \\ -1 & 8 & -1 \\ -1 & -1 & -1 \end{bmatrix}$ | ![edgeDetect-2](img/ch5/cat-edgeDetect-2.jpg) |
| 图像锐化 | $\begin{bmatrix} 0 & -1 & 0 \\ -1 & 5 & -1 \\ 0 & -1 & 0 \end{bmatrix}$ | ![sharpen_img](img/ch5/cat-sharpen.jpg) |
| 方块模糊 | $\begin{bmatrix} 1 & 1 & 1 \\ 1 & 1 & 1 \\ 1 & 1 & 1 \end{bmatrix} \times \frac{1}{9}$ | ![box_blur](img/ch5/cat-boxblur.jpg) |
| 高斯模糊 | $\begin{bmatrix} 1 & 2 & 1 \\ 2 & 4 & 2 \\ 1 & 2 & 1 \end{bmatrix} \times \frac{1}{16}$ | ![gaussian_blur](img/ch5/cat-blur-gaussian.jpg) |
## 5.3 卷积层有哪些基本参数?
@ -101,22 +101,22 @@ $$
| 卷积类别 | 示意图 | 作用 |
| :----------------------------: | :---------------------------: | :----------------------------------------------------------- |
| 标准卷积 | ![image](./img/ch5/img7.png) | 最常用的卷积核,连续紧密的矩阵形式可以提取图像区域中的相邻像素之间的关联关系,$3\times3$的卷积核可以获得$3\times3$像素范围的感受视野 |
| 扩张卷积(带孔卷积或空洞卷积) | ![image](./img/ch5/img8.png) | 引入一个称作扩张率Dilation Rate的参数使同样尺寸的卷积核可以获得更大的感受视野相应的在相同感受视野的前提下比普通卷积采用更少的参数。同样是$3\times3$的卷积核尺寸,扩张卷积可以提取$5\times5$范围的区域特征,在实时图像分割领域广泛应用 |
| 转置卷积 | ![image](./img/ch5/img10.png) | 先对原始特征矩阵进行填充使其维度扩大到适配卷积目标输出维度,然后进行普通的卷积操作的一个过程,其输入到输出的维度变换关系恰好与普通卷积的变换关系相反,但这个变换并不是真正的逆变换操作,通常称为转置卷积(Transpose Convolution)而不是反卷积(Deconvolution)。转置卷积常见于目标检测领域中对小目标的检测和图像分割领域还原输入图像尺度。 |
| 可分离卷积 | ![image](./img/ch5/img11.png) | 标准的卷积操作是同时对原始图像$H\times W\times C$三个方向的卷积运算,假设有$K$个相同尺寸的卷积核,这样的卷积操作需要用到的参数为$H\times W\times C\times K$个;若将长宽与深度方向的卷积操作分离出变为$H\times W$与$C$的两步卷积操作,则同样的卷积核个数$K$,只需要$(H\times W + C)\times K$个参数,便可得到同样的输出尺度。可分离卷积(Seperable Convolution)通常应用在模型压缩或一些轻量的卷积神经网络中如MobileNet$^{[1]}$、Xception$^{[2]}$等 |
| 标准卷积 | ![image](img/ch5/img7.png) | 最常用的卷积核,连续紧密的矩阵形式可以提取图像区域中的相邻像素之间的关联关系,$3\times3$的卷积核可以获得$3\times3$像素范围的感受视野 |
| 扩张卷积(带孔卷积或空洞卷积) | ![image](img/ch5/img8.png) | 引入一个称作扩张率Dilation Rate的参数使同样尺寸的卷积核可以获得更大的感受视野相应的在相同感受视野的前提下比普通卷积采用更少的参数。同样是$3\times3$的卷积核尺寸,扩张卷积可以提取$5\times5$范围的区域特征,在实时图像分割领域广泛应用 |
| 转置卷积 | ![image](img/ch5/img10.png) | 先对原始特征矩阵进行填充使其维度扩大到适配卷积目标输出维度,然后进行普通的卷积操作的一个过程,其输入到输出的维度变换关系恰好与普通卷积的变换关系相反,但这个变换并不是真正的逆变换操作,通常称为转置卷积(Transpose Convolution)而不是反卷积(Deconvolution)。转置卷积常见于目标检测领域中对小目标的检测和图像分割领域还原输入图像尺度。 |
| 可分离卷积 | ![image](img/ch5/img11.png) | 标准的卷积操作是同时对原始图像$H\times W\times C$三个方向的卷积运算,假设有$K$个相同尺寸的卷积核,这样的卷积操作需要用到的参数为$H\times W\times C\times K$个;若将长宽与深度方向的卷积操作分离出变为$H\times W$与$C$的两步卷积操作,则同样的卷积核个数$K$,只需要$(H\times W + C)\times K$个参数,便可得到同样的输出尺度。可分离卷积(Seperable Convolution)通常应用在模型压缩或一些轻量的卷积神经网络中如MobileNet$^{[1]}$、Xception$^{[2]}$等 |
## 5.5 二维卷积与三维卷积有什么区别?
- **二维卷积**
二维卷积操作如图5.3所示,为了更直观的说明,分别展示在单通道和多通道输入中,对单个通道输出的卷积操作。在单通道输入的情况下,若输入卷积核尺寸为 $(k_h, k_w, 1)$,卷积核在输入图像的空间维度上进行滑窗操作,每次滑窗和 $(k_h, k_w)$窗口内的值进行卷积操作得到输出图像中的一个值。在多通道输入的情况下假定输入图像特征通道数为3卷积核尺寸则为$(k_h, k_w, 3)$每次滑窗与3个通道上的$(k_h, k_w)$窗口内的所有值进行卷积操作,得到输出图像中的一个值。
![image](./img/ch5/5.6.1.png)
![image](img/ch5/5.6.1.png)
- **三维卷积**
3D卷积操作如图所示同样分为单通道和多通道且假定只使用1个卷积核即输出图像仅有一个通道。对于单通道输入与2D卷积不同之处在于输入图像多了一个深度(depth)维度,卷积核也多了一个$k_d$维度因此3D卷积核的尺寸为$(k_h, k_w, k_d)$,每次滑窗与$(k_h, k_w, k_d)$窗口内的值进行相关操作得到输出3D图像中的一个值。对于多通道输入则与2D卷积的操作一样每次滑窗与3个channels上的$(k_h, k_w, k_d)$窗口内的所有值进行相关操作得到输出3D图像中的一个值。
![image](./img/ch5/5.6.2.png)
![image](img/ch5/5.6.2.png)
## 5.7 有哪些池化方法?
@ -125,9 +125,9 @@ $$
| 池化类型 | 示意图 | 作用 |
| :-----------------------------------------: | :-----------------------------------------------: | :----------------------------------------------------------- |
| 一般池化(General Pooling) | ![max_pooling](./img/ch5/general_pooling.png) | 通常包括最大池化(Max Pooling)和平均池化(Mean Pooling)。以最大池化为例,池化范围$(2\times2)$和滑窗步长$(stride=2)$ 相同,仅提取一次相同区域的范化特征。 |
| 重叠池化(Overlapping Pooling) | ![overlap_pooling](./img/ch5/overlap_pooling.png) | 与一般池化操作相同,但是池化范围$P_{size}$与滑窗步长$stride$关系为$P_{size}>stride$,同一区域内的像素特征可以参与多次滑窗提取,得到的特征表达能力更强,但计算量更大。 |
| 空间金字塔池化$^*$(Spatial Pyramid Pooling) | ![spatial_pooling](./img/ch5/spatial_pooling.png) | 在进行多尺度目标的训练时,卷积层允许输入的图像特征尺度是可变的,紧接的池化层若采用一般的池化方法会使得不同的输入特征输出相应变化尺度的特征,而卷积神经网络中最后的全连接层则无法对可变尺度进行运算,因此需要对不同尺度的输出特征采样到相同输出尺度。 |
| 一般池化(General Pooling) | ![max_pooling](img/ch5/general_pooling.png) | 通常包括最大池化(Max Pooling)和平均池化(Mean Pooling)。以最大池化为例,池化范围$(2\times2)$和滑窗步长$(stride=2)$ 相同,仅提取一次相同区域的范化特征。 |
| 重叠池化(Overlapping Pooling) | ![overlap_pooling](img/ch5/overlap_pooling.png) | 与一般池化操作相同,但是池化范围$P_{size}$与滑窗步长$stride$关系为$P_{size}>stride$,同一区域内的像素特征可以参与多次滑窗提取,得到的特征表达能力更强,但计算量更大。 |
| 空间金字塔池化$^*$(Spatial Pyramid Pooling) | ![spatial_pooling](img/ch5/spatial_pooling.png) | 在进行多尺度目标的训练时,卷积层允许输入的图像特征尺度是可变的,紧接的池化层若采用一般的池化方法会使得不同的输入特征输出相应变化尺度的特征,而卷积神经网络中最后的全连接层则无法对可变尺度进行运算,因此需要对不同尺度的输出特征采样到相同输出尺度。 |
> SPPNet$^{[3]}$就引入了空间池化的组合,对不同输出尺度采用不同的滑窗大小和步长以确保输出尺度相同$(win_{size}=\lceil \frac{in}{out}\rceil; stride=\lfloor \frac{in}{out}\rfloor; )$,同时用如金字塔式叠加的多种池化尺度组合,以提取更加丰富的图像特征。常用于多尺度训练和目标检测中的区域提议网络(Region Proposal Network)的兴趣区域(Region of Interest)提取
@ -139,7 +139,7 @@ $$
GoogLeNet$^{[5]}$则采用$1\times1$卷积核来减少模型的参数量。在原始版本的Inception模块中由于每一层网络采用了更多的卷积核大大增加了模型的参数量。此时在每一个较大卷积核的卷积层前引入$1\times1$卷积可以通过分离通道与宽高卷积来减少模型参数量。以图5.2为例,在不考虑参数偏置项的情况下,若输入和输出的通道数为$C_1=16$,则左半边网络模块所需的参数为$(1\times1+3\times3+5\times5+0)\times C_1\times C_1=8960$;假定右半边网络模块采用的$1\times1$卷积通道数为$C_2=8$$(满足C_1>C_2)$,则右半部分的网络结构所需参数量为$(1\times1\times (3C_1+C_2)+3\times3\times C_2 +5\times5\times C_2)\times C_1=5248$ ,可以在不改变模型表达能力的前提下大大减少所使用的参数量。
![image](./img/ch5/5.8-1.png)
![image](img/ch5/5.8-1.png)
图5.2 Inception模块
@ -175,7 +175,7 @@ $$
经典的神经网络一般都属于层叠式网络每层仅用一个尺寸的卷积核如VGG结构中使用了大量的$3×3$卷积层。事实上同一层特征图可以分别使用多个不同尺寸的卷积核以获得不同尺度的特征再把这些特征结合起来得到的特征往往比使用单一卷积核的要好如GoogLeNet、Inception系列的网络均是每层使用了多个卷积核结构。如图5.3所示,输入的特征在同一层分别经过$1×1$、$3×3$和$5×5$三种不同尺寸的卷积核,再将分别得到的特征进行整合,得到的新特征可以看作不同感受域提取的特征组合,相比于单一卷积核会有更强的表达能力。
![image](./img/ch5/5.11-1.png)
![image](img/ch5/5.11-1.png)
图5.3 Inception模块结构
@ -194,13 +194,13 @@ $$
标准卷积中,采用区域与通道同时处理的操作,如下图所示:
![image](./img/ch5/5.13-1.png)
![image](img/ch5/5.13-1.png)
这样做可以简化卷积层内部的结构,每一个输出的特征像素都由所有通道的同一个区域提取而来。
但是这种方式缺乏灵活性并且在深层的网络结构中使得运算变得相对低效更为灵活的方式是使区域和通道的卷积分离开来通道分离深度分离卷积网络由此诞生。如下图所示Xception网络可解决上述问题。
![image](./img/ch5/5.13-2.png)
![image](img/ch5/5.13-2.png)
我们首先对每一个通道进行各自的卷积操作,有多少个通道就有多少个过滤器。得到新的通道特征矩阵之后,再对这批新通道特征进行标准的$1×1$跨通道卷积操作。
@ -211,7 +211,7 @@ $$
比如下图左部分为窄卷积。注意到越在边缘的位置被卷积的次数越少。宽卷积可以看作在卷积之前在边缘用0补充常见有两种情况一个是全补充如下图右部分这样输出大于输入的维度。另一种常用的方法是补充一一部分0值使得输出和输入的维度一致。
![image](./img/ch5/5.14.1.png)
![image](img/ch5/5.14.1.png)
## 5.15 理解转置卷积与棋盘效应
@ -221,19 +221,19 @@ $$
首先给出一个输入输出结果
![image](./img/ch5/img32.png)
![image](img/ch5/img32.png)
那是怎样计算的呢?
卷积的时候需要对卷积核进行180的旋转同时卷积核中心与需计算的图像像素对齐输出结构为中心对齐像素的一个新的像素值计算例子如下
![image](./img/ch5/5.19.1-2.png)
![image](img/ch5/5.19.1-2.png)
这样计算出左上角(即第一行第一列)像素的卷积后像素值。
给出一个更直观的例子从左到右看原像素经过卷积由1变成-8。
![image](./img/ch5/5.19.1-3.png)
![image](img/ch5/5.19.1-3.png)
通过滑动卷积核,就可以得到整张图片的卷积结果。
@ -241,7 +241,7 @@ $$
图像的deconvolution过程如下
![image](./img/ch5/5.19.2-5.png)
![image](img/ch5/5.19.2-5.png)
输入2x2 卷积核4x4 滑动步长3 输出7x7
@ -313,7 +313,7 @@ $$
在图像卷积操作中,神经元在空间维度上是局部连接,但在深度上是全连接。局部连接的思想,是受启发于生物学里的视觉系统结构,视觉皮层的神经元就是仅用局部接受信息。对于二维图像,局部像素关联性较强。这种局部连接保证了训练后的滤波器能够对局部特征有最强的响应,使神经网络可以提取数据的局部特征;
下图是一个很经典的图示,左边是全连接,右边是局部连接。
![image](./img/ch5/5.27.1.png)
![image](img/ch5/5.27.1.png)
对于一个1000 × 1000的输入图像而言如果下一个隐藏层的神经元数目为10^6个采用全连接则有1000 × 1000 × 10^6 = 10^12个权值参数如此巨大的参数量几乎难以训练而采用局部连接隐藏层的每个神经元仅与图像中10 × 10的局部图像相连接那么此时的权值参数数量为10 × 10 × 10^6 = 10^8将直接减少4个数量级。
@ -323,7 +323,7 @@ $$
需要注意的是,权重只是对于同一深度切片的神经元是共享的。在卷积层中,通常采用多组卷积核提取不同的特征,即对应的是不同深度切片的特征,而不同深度切片的神经元权重是不共享。相反,偏置这一权值对于同一深度切片的所有神经元都是共享的。
权值共享带来的好处是大大降低了网络的训练难度。如下图假设在局部连接中隐藏层的每一个神经元连接的是一个10 × 10的局部图像因此有10 × 10个权值参数将这10 × 10个权值参数共享给剩下的神经元也就是说隐藏层中10^6个神经元的权值参数相同那么此时不管隐藏层神经元的数目是多少需要训练的参数就是这 10 × 10个权值参数也就是卷积核的大小
![image](./img/ch5/5.27.2.png)
![image](img/ch5/5.27.2.png)
这里就体现了卷积神经网络的奇妙之处使用少量的参数却依然能有非常出色的性能。上述仅仅是提取图像一种特征的过程。如果要多提取出一些特征可以增加多个卷积核不同的卷积核能够得到图像不同尺度下的特征称之为特征图feature map
@ -331,7 +331,7 @@ $$
池化操作与多层次结构一起,实现了数据的降维,将低层次的局部特征组合成为较高层次的特征,从而对整个图片进行表示。如下图:
![image](./img/ch5/5.27.3.png)
![image](img/ch5/5.27.3.png)
## 5.20 全连接、局部连接、全卷积与局部卷积
大多数神经网络中高层网络通常会采用全连接层(Global Connected Layer),通过多对多的连接方式对特征进行全局汇总,可以有效地提取全局信息。但是全连接的方式需要大量的参数,是神经网络中最占资源的部分之一,因此就需要由局部连接(Local Connected Layer),仅在局部区域范围内产生神经元连接,能够有效地减少参数量。根据卷积操作的作用范围可以分为全卷积(Global Convolution)和局部卷积(Local Convolution)。实际上这里所说的全卷积就是标准卷积,即在整个输入特征维度范围内采用相同的卷积核参数进行运算,全局共享参数的连接方式可以使神经元之间的连接参数大大减少;局部卷积又叫平铺卷积(Tiled Convolution)或非共享卷积(Unshared Convolution)是局部连接与全卷积的折衷。四者的比较如表XX所示。
@ -348,7 +348,7 @@ $$
## 5.21 局部卷积的应用
并不是所有的卷积都会进行权重共享在某些特定任务中会使用不权重共享的卷积。下面通过人脸这一任务来进行讲解。在读人脸方向的一些paper时会发现很多都会在最后加入一个Local Connected Conv也就是不进行权重共享的卷积层。总的来说这一步的作用就是使用3D模型来将人脸对齐从而使CNN发挥最大的效果。
![image](./img/ch5/img66.png)
![image](img/ch5/img66.png)
截取论文中的一部分图经过3D对齐以后形成的图像均是152×152输入到上述的网络结构中。该结构的参数如下

View File

@ -16,7 +16,7 @@
在进一步了解RNN之前先给出最基本的单层网络结构输入是`$x$`,经过变换`Wx+b`和激活函数`f`得到输出`y`
![](./img/ch6/6.1.jpg)
![](img/ch6/6.1.jpg)
### 6.2.2 图解经典RNN结构
@ -30,31 +30,31 @@
其单个序列如下图所示:
![](./img/ch6/6.2.jpg)
![](img/ch6/6.2.jpg)
前面介绍了诸如此类的序列数据用原始的神经网络难以建模基于此RNN引入了隐状态$h$hidden state$h$可对序列数据提取特征,接着再转换为输出。
为了便于理解,先计算$h_1$
![](./img/ch6/6.3.jpg)
![](img/ch6/6.3.jpg)
注:图中的圆圈表示向量,箭头表示对向量做变换。
RNN中每个步骤使用的参数`$U,W,b$`​相同,`$h_2$`的计算方式和`$h_1$`类似,其计算结果如下:
![](./img/ch6/6.4.jpg)
![](img/ch6/6.4.jpg)
计算$h_3$,$h_4$也相似,可得:
![](./img/ch6/6.5.jpg)
![](img/ch6/6.5.jpg)
接下来计算RNN的输出$y_1$,采用$Softmax$作为激活函数,根据$y_n=f(Wx+b)$,得$y_1$:
![](./img/ch6/6.6.jpg)
![](img/ch6/6.6.jpg)
使用和$y_1$相同的参数$V,c$,得到$y_1,y_2,y_3,y_4$的输出结构:
![](./img/ch6/6.7.jpg)
![](img/ch6/6.7.jpg)
以上即为最经典的RNN结构其输入为$x_1,x_2,x_3,x_4$,输出为$y_1,y_2,y_3,y_4$,当然实际中最大值为$y_n$这里为了便于理解和展示只计算4个输入和输出。从以上结构可看出RNN结构的输入和输出等长。
@ -64,17 +64,17 @@
方式一:可只在其中的某一个序列进行计算,比如序列第一个进行输入计算,其建模方式如下:
![](./img/ch6/6.9.jpg)
![](img/ch6/6.9.jpg)
方式二把输入信息X作为每个阶段的输入其建模方式如下
![](./img/ch6/6.10.jpg)
![](img/ch6/6.10.jpg)
### 6.2.4 sequence-to-vector结构
有时我们要处理的问题输入是一个序列,输出是一个单独的值,此时通常在最后的一个序列上进行输出变换,其建模如下所示:
![](./img/ch6/6.8.jpg)
![](img/ch6/6.8.jpg)
### 6.2.5 Encoder-Decoder结构
@ -84,23 +84,23 @@
**步骤一**:将输入数据编码成一个上下文向量$c$这部分称为Encoder得到$c$有多种方式最简单的方法就是把Encoder的最后一个隐状态赋值给$c$,还可以对最后的隐状态做一个变换得到$c$,也可以对所有的隐状态做变换。其示意如下所示:
![](./img/ch6/6.12.jpg)
![](img/ch6/6.12.jpg)
**步骤二**用另一个RNN网络我们将其称为Decoder对其进行编码方法一是将步骤一中的$c$作为初始状态输入到Decoder示意图如下所示
![](./img/ch6/6.13.jpg)
![](img/ch6/6.13.jpg)
方法二是将$c$作为Decoder的每一步输入示意图如下所示
![](./img/ch6/6.14.jpg)
![](img/ch6/6.14.jpg)
### 6.2.6 以上三种结构各有怎样的应用场景
| 网络结构 | 结构图示 | 应用场景举例 |
| -------- | :---------------------: | ------------------------------------------------------------ |
| 1 vs N | ![](./img/ch6/6.9.jpg) | 1、从图像生成文字输入为图像的特征输出为一段句子<br />2、根据图像生成语音或音乐输入为图像特征输出为一段语音或音乐 |
| N vs 1 | ![](./img/ch6/6.8.jpg) | 1、输出一段文字判断其所属类别<br />2、输入一个句子判断其情感倾向<br />3、输入一段视频判断其所属类别 |
| N vs M | ![](./img/ch6/6.13.jpg) | 1、机器翻译输入一种语言文本序列输出另外一种语言的文本序列<br />2、文本摘要输入文本序列输出这段文本序列摘要<br />3、阅读理解输入文章输出问题答案<br />4、语音识别输入语音序列信息输出文字序列 |
| 1 vs N | ![](img/ch6/6.9.jpg) | 1、从图像生成文字输入为图像的特征输出为一段句子<br />2、根据图像生成语音或音乐输入为图像特征输出为一段语音或音乐 |
| N vs 1 | ![](img/ch6/6.8.jpg) | 1、输出一段文字判断其所属类别<br />2、输入一个句子判断其情感倾向<br />3、输入一段视频判断其所属类别 |
| N vs M | ![](img/ch6/6.13.jpg) | 1、机器翻译输入一种语言文本序列输出另外一种语言的文本序列<br />2、文本摘要输入文本序列输出这段文本序列摘要<br />3、阅读理解输入文章输出问题答案<br />4、语音识别输入语音序列信息输出文字序列 |
### 6.2.7 图解RNN中的Attention机制
@ -108,19 +108,19 @@
引入了Attention机制的Decoder中有不同的$c$,每个$c$会自动选择与当前输出最匹配的上下文信息,其示意图如下所示:
![](./img/ch6/6.15.jpg)
![](img/ch6/6.15.jpg)
**举例**,比如输入序列是“我爱中国”,要将此输入翻译成英文:
假如用$a_{ij}$衡量Encoder中第$j$阶段的$h_j$和解码时第$i$阶段的相关性,$a_{ij}$从模型中学习得到和Decoder的第$i-1$阶段的隐状态、Encoder 第$j$个阶段的隐状态有关,比如$a_{3j}$的计算示意如下所示:
![](./img/ch6/6.19.jpg)
![](img/ch6/6.19.jpg)
最终Decoder中第$i$阶段的输入的上下文信息 $c_i$来自于所有$h_j$对$a_{ij}$的加权和。
其示意图如下图所示:
![](./img/ch6/6.16.jpg)
![](img/ch6/6.16.jpg)
在Encoder中$h_1,h_2,h_3,h_4$分别代表“我”,“爱”,“中”,“国”所代表信息。翻译的过程中,$c_1$会选择和“我”最相关的上下午信息,如上图所示,会优先选择$a_{11}$,以此类推,$c_2$会优先选择相关性较大的$a_{22}$$c_3$会优先选择相关性较大的$a_{33}a_{34}$这就是attention机制。
@ -132,9 +132,9 @@
4. 在标准的RNN结构中隐层的神经元之间也是带有权值的且权值共享。
5. 理论上RNNs能够对任何长度序列数据进行处理。但是在实践中为了降低复杂度往往假设当前的状态只与之前某几个时刻状态相关**下图便是一个典型的RNNs**
![](./img/ch6/figure_6.2_1.png)
![](img/ch6/figure_6.2_1.png)
![](./img/ch6/figure_6.2_2.jpg)
![](img/ch6/figure_6.2_2.jpg)
输入单元(Input units):输入集$\bigr\{x_0,x_1,...,x_t,x_{t+1},...\bigr\}$
@ -163,7 +163,7 @@
2. RNNs可以记忆之前步骤的训练信息。
**定向循环结构如下图所示**
![](./img/ch6/figure_6.1_1.jpg)
![](img/ch6/figure_6.1_1.jpg)
@ -185,7 +185,7 @@
以$x$表示输入,$h$是隐层单元,$o$是输出,$L$为损失函数,$y$为训练集标签。$t$表示$t$时刻的状态,$V,U,W$是权值同一类型的连接权值相同。以下图为例进行说明标准RNN的前向传播算法
![](./img/ch6/rnnbp.png)
![](img/ch6/rnnbp.png)
对于$t$时刻:
$$
@ -242,11 +242,11 @@ $$
首先来看tanh函数的函数及导数图如下所示
![](./img/ch6/tanh.jpg)
![](img/ch6/tanh.jpg)
sigmoid函数的函数及导数图如下所示
![](./img/ch6/sigmoid.jpg)
![](img/ch6/sigmoid.jpg)
从上图观察可知sigmoid函数的导数范围是(0,0.25]tanh函数的导数范围是(0,1]他们的导数最大都不大于1。
@ -283,17 +283,17 @@ $$
所有 RNN 都具有一种重复神经网络模块的链式的形式。在标准的 RNN 中,这个重复的模块只有一个非常简单的结构,例如一个 tanh 层,如下图所示:
![](./img/ch6/LSTM1.png)
![](img/ch6/LSTM1.png)
LSTM 同样是这样的结构,但是重复的模块拥有一个不同的结构。不同于单一神经网络层,这里是有四个,以一种非常特殊的方式进行交互。
![](./img/ch6/LSTM2.png)
![](img/ch6/LSTM2.png)
注:上图图标具体含义如下所示:
![](./img/ch6/LSTM3.png)
![](img/ch6/LSTM3.png)
上图中,每一条黑线传输着一整个向量,从一个节点的输出到其他节点的输入。粉色的圈代表 pointwise 的操作,诸如向量的和,而黄色的矩阵就是学习到的神经网络层。合在一起的线表示向量的连接,分开的线表示内容被复制,然后分发到不同的位置。
@ -301,11 +301,11 @@ $$
LSTM 的关键就是细胞状态,水平线在图上方贯穿运行。细胞状态类似于传送带。直接在整个链上运行,只有一些少量的线性交互。信息在上面流传保持不变会很容易。示意图如下所示:
![](./img/ch6/LSTM4.png)
![](img/ch6/LSTM4.png)
LSTM 有通过精心设计的称作为“门”的结构来去除或者增加信息到细胞状态的能力。门是一种让信息选择式通过的方法。他们包含一个 sigmoid 神经网络层和一个 pointwise 乘法操作。示意图如下:
![](./img/ch6/LSTM5.png)
![](img/ch6/LSTM5.png)
@ -319,7 +319,7 @@ LSTM 拥有三个门,分别是忘记层门,输入层门和输出层门,来
操作步骤:该门会读取$h_{t-1}$和$x_t$,输出一个在 0 到 1 之间的数值给每个在细胞状态$C_{t-1}$中的数字。1 表示“完全保留”0 表示“完全舍弃”。示意图如下:
![](./img/ch6/LSTM6.png)
![](img/ch6/LSTM6.png)
**输入层门**
@ -333,11 +333,11 @@ LSTM 拥有三个门,分别是忘记层门,输入层门和输出层门,来
步骤二tanh 层创建一个新的候选值向量$\tilde{C}_t$加入到状态中。其示意图如下:
![](./img/ch6/LSTM7.png)
![](img/ch6/LSTM7.png)
步骤三:将$c_{t-1}$更新为$c_{t}$。将旧状态与$f_t$相乘,丢弃掉我们确定需要丢弃的信息。接着加上$i_t * \tilde{C}_t$得到新的候选值,根据我们决定更新每个状态的程度进行变化。其示意图如下:
![](./img/ch6/LSTM8.png)
![](img/ch6/LSTM8.png)
**输出层门**
作用对象:隐层$h_t$
@ -352,7 +352,7 @@ LSTM 拥有三个门,分别是忘记层门,输入层门和输出层门,来
其示意图如下所示:
![](./img/ch6/LSTM9.png)
![](img/ch6/LSTM9.png)
### 6.11.4 LSTM流行的变体
@ -360,19 +360,19 @@ LSTM 拥有三个门,分别是忘记层门,输入层门和输出层门,来
在正常的LSTM结构中Gers F A 等人提出增加peephole 连接,可以门层接受细胞状态的输入。示意图如下所示:
![](./img/ch6/LSTM10.png)
![](img/ch6/LSTM10.png)
**对忘记门和输入门进行同时确定**
不同于之前是分开确定什么忘记和需要添加什么新的信息,这里是一同做出决定。示意图如下所示:
![](./img/ch6/LSTM11.png)
![](img/ch6/LSTM11.png)
**Gated Recurrent Unit**
由Kyunghyun Cho等人提出的Gated Recurrent Unit (GRU),其将忘记门和输入门合成了一个单一的更新门,同样还混合了细胞状态和隐藏状态,和其他一些改动。其示意图如下:
![](./img/ch6/LSTM12.png)
![](img/ch6/LSTM12.png)
最终的模型比标准的 LSTM 模型要简单,也是非常流行的变体。
@ -380,7 +380,7 @@ LSTM 拥有三个门,分别是忘记层门,输入层门和输出层门,来
LSTMs与GRUs的区别如图所示
![](./img/ch6/figure_6.6.6_2.png)
![](img/ch6/figure_6.6.6_2.png)
从上图可以看出,二者结构十分相似,**不同在于**
@ -405,7 +405,7 @@ LSTMs与GRUs的区别如图所示
**4图像描述生成 (Generating Image Descriptions)**
同卷积神经网络一样RNNs已经在对无标图像描述自动生成中得到应用。CNNs与RNNs结合也被应用于图像描述自动生成。
![](./img/ch6/figure_6.4_1.png)
![](img/ch6/figure_6.4_1.png)
## 6.13 常见的RNNs扩展和改进模型
@ -417,18 +417,18 @@ LSTMs与GRUs的区别如图所示
2. 在每一步中使用标准的前向反馈进行传播然后使用学习算法进行学习。上下文每一个节点保存其连接隐藏层节点上一步输出即保存上文并作用于当前步对应的隐藏层节点状态即隐藏层的输入由输入层的输出与上一步的自身状态所决定。因此SRNs能够解决标准多层感知机(MLP)无法解决的对序列数据进行预测的问题。
SRNs网络结构如下图所示
![](./img/ch6/figure_6.6.1_1.png)
![](img/ch6/figure_6.6.1_1.png)
### 6.13.2 Bidirectional RNNs
Bidirectional RNNs(双向网络)将两层RNNs叠加在一起当前时刻输出(第t步的输出)不仅仅与之前序列有关还与之后序列有关。例如为了预测一个语句中的缺失词语就需要该词汇的上下文信息。Bidirectional RNNs是一个相对较简单的RNNs是由两个RNNs上下叠加在一起组成的。输出由前向RNNs和后向RNNs共同决定。如下图所示
![](./img/ch6/figure_6.6.2_1.png)
![](img/ch6/figure_6.6.2_1.png)
### 6.13.3 Deep RNNs
Deep RNNs与Bidirectional RNNs相似其也是又多层RNNs叠加因此每一步的输入有了多层网络。该网络具有更强大的表达与学习能力但是复杂性也随之提高同时需要更多的训练数据。Deep RNNs的结构如下图所示
![](./img/ch6/figure_6.6.3_1.png)
![](img/ch6/figure_6.6.3_1.png)
### 6.13.4 Echo State NetworksESNs
**ESNs特点**
@ -450,7 +450,7 @@ SRNs网络结构如下图所示
ESNs的结构如下图所示
![](./img/ch6/figure_6.6.4_2.png)
![](img/ch6/figure_6.6.4_2.png)
### 6.13.4 Gated Recurrent Unit Recurrent Neural Networks
GRUs是一般的RNNs的变型版本其主要是从以下两个方面进行改进。
@ -459,7 +459,7 @@ GRUs是一般的RNNs的变型版本其主要是从以下两个方面进行改
2. 在产生误差error时其可能是由之前某一个或者几个单词共同造成所以应当对对应的单词weight进行更新。GRUs的结构如下图所示。GRUs首先根据当前输入单词向量word vector以及前一个隐藏层状态hidden state计算出update gate和reset gate。再根据reset gate、当前word vector以及前一个hidden state计算新的记忆单元内容(new memory content)。当reset gate为1的时候new memory content忽略之前所有memory content最终的memory是由之前的hidden state与new memory content一起决定。
![](./img/ch6/figure_6.6.5_1.png)
![](img/ch6/figure_6.6.5_1.png)
@ -478,7 +478,7 @@ GRUs是一般的RNNs的变型版本其主要是从以下两个方面进行改
**CW-RNNs的网络结构如下图所示**
![](./img/ch6/figure_6.6.7_1.png)
![](img/ch6/figure_6.6.7_1.png)
### 6.13.8 CNN-LSTMs
1. 为了同时利用CNN以及LSTMs的优点CNN-LSTMs被提出。在该模型中CNN用于提取对象特征LSTMs用于预测。CNN由于卷积特性其能够快速而且准确地捕捉对象特征。LSTMs的优点在于能够捕捉数据间的长时依赖性。

View File

@ -11,7 +11,7 @@
### 7.1.2 GAN的形式化表达
上述例子只是简要介绍了一下GAN的思想下面对于GAN做一个形式化的更加具体的定义。通常情况下无论是生成器还是判别器我们都可以用神经网络来实现。那么我们可以把通俗化的定义用下面这个模型来表示
![GAN网络结构](./img/ch7/7.1.png)
![GAN网络结构](img/ch7/7.1.png)
上述模型左边是生成器G其输入是$z$对于原始的GAN$z$是由高斯分布随机采样得到的噪声。噪声$z$通过生成器得到了生成的假样本。
@ -85,7 +85,7 @@ $$
### 7.1.7 什么是mode collapsing?
某个模式(mode)出现大量重复样本,例如:
![model collapsing](./img/ch7/model_collpsing.png)
![model collapsing](img/ch7/model_collpsing.png)
上图左侧的蓝色五角星表示真实样本空间,黄色的是生成的。生成样本缺乏多样性,存在大量重复。比如上图右侧中,红框里面人物反复出现。
### 7.1.8 如何解决mode collapsing
@ -98,13 +98,13 @@ $$
Multi agent diverse GAN(MAD-GAN)采用多个生成器,一个判别器以保障样本生成的多样性。具体结构如下:
![](./img/ch7/MAD_GAN.png)
![](img/ch7/MAD_GAN.png)
相比于普通GAN多了几个生成器且在loss设计的时候加入一个正则项。正则项使用余弦距离惩罚三个生成器生成样本的一致性。
MRGAN则添加了一个判别器来惩罚生成样本的mode collapse问题。具体结构如下
![](./img/ch7/MRGAN.png)
![](img/ch7/MRGAN.png)
输入样本$x$通过一个Encoder编码为隐变量$E(x)$然后隐变量被Generator重构训练时Loss有三个。$D_M$和$R$重构误差用于指导生成real-like的样本。而$D_D$则对$E(x)$和$z$生成的样本进行判别显然二者生成样本都是fake samples所以这个判别器主要用于判断生成的样本是否具有多样性即是否出现mode collapse。
@ -208,9 +208,9 @@ p_{data}(x)=\prod_{i=1}^np(x_i|x_1,x_2,...,x_{i-1})
$$
上述公式很好理解,给定$x_1,x_2,...,x_{i-1}$条件下,所有$p(x_i)$的概率乘起来就是图像数据的分布。如果使用RNN对上述依然关系建模就是pixelRNN。如果使用CNN则是pixelCNN。具体如下[5]
![](./img/ch7/pixRNN.png)
![](img/ch7/pixRNN.png)
![](./img/ch7/pixCNN.png)
![](img/ch7/pixCNN.png)
显然不论是对于pixelCNN还是pixelRNN由于其像素值是一个个生成的速度会很慢。语音领域大火的WaveNet就是一个典型的自回归模型。
@ -218,7 +218,7 @@ $$
PixelCNN/RNN定义了一个易于处理的密度函数我们可以直接优化训练数据的似然对于变分自编码器我们将定义一个不易处理的密度函数通过附加的隐变量$z$对密度函数进行建模。 VAE原理图如下[6]
![](./img/ch7/VAE.png)
![](img/ch7/VAE.png)
在VAE中真实样本$X$通过神经网络计算出均值方差(假设隐变量服从正太分布),然后通过采样得到采样变量$Z$并进行重构。VAE和GAN均是学习了隐变量$z$到真实数据分布的映射。但是和GAN不同的是
@ -236,7 +236,7 @@ $$
### 7.4.1 如何生成指定类型的图像——条件GAN
条件生成对抗网络CGAN, Conditional Generative Adversarial Networks作为一个GAN的改进其一定程度上解决了GAN生成结果的不确定性。如果在Mnist数据集上训练原始GANGAN生成的图像是完全不确定的具体生成的是数字1还是2还是几根本不可控。为了让生成的数字可控我们可以把数据集做一个切分把数字0~9的数据集分别拆分开训练9个模型不过这样太麻烦了也不现实。因为数据集拆分不仅仅是分类麻烦更主要在于每一个类别的样本少拿去训练GAN很有可能导致欠拟合。因此CGAN就应运而生了。我们先看一下CGAN的网络结构
![CGAN网络结构](./img/ch7/CGAN网络结构.png)
![CGAN网络结构](img/ch7/CGAN网络结构.png)
从网络结构图可以看到对于生成器Generator其输入不仅仅是随机噪声的采样z还有欲生成图像的标签信息。比如对于mnist数据生成就是一个one-hot向量某一维度为1则表示生成某个数字的图片。同样地判别器的输入也包括样本的标签。这样就使得判别器和生成器可以学习到样本和标签之间的联系。Loss如下
$$
\mathop {\min }\limits_G \mathop {\max }\limits_D V(D,G) = {\rm E}_{x\sim{p_{data}(x)}}[\log D(x|y)] + {\rm E}_{z\sim{p_z}(z)}[\log (1 - D(G(z|y)))]
@ -254,14 +254,14 @@ $$
- 在discriminator的所有层上使用LeakyReLU。
网络结构图如下:
![CGAN网络结构图](./img/ch7/DCGAN%E7%BB%93%E6%9E%84%E5%9B%BE.png)
![CGAN网络结构图](img/ch7/DCGAN%E7%BB%93%E6%9E%84%E5%9B%BE.png)
### 7.4.3 如何理解GAN中的输入随机噪声
为了了解输入随机噪声每一个维度代表的含义作者做了一个非常有趣的工作。即在隐空间上假设知道哪几个变量控制着某个物体那么僵这几个变量挡住是不是就可以将生成图片中的某个物体消失论文中的实验是这样的首先生成150张图片包括有窗户的和没有窗户的然后使用一个逻辑斯底回归函数来进行分类对于权重不为0的特征认为它和窗户有关。将其挡住得到新的生成图片结果如下
![DCGAN输入噪声理解](./img/ch7/7.4.3.png)
![DCGAN输入噪声理解](img/ch7/7.4.3.png)
此外,将几个输入噪声进行算数运算,可以得到语义上进行算数运算的非常有趣的结果。类似于word2vec。
![DCGAN输入噪声算术运算](./img/ch7/7.4.3-2.png)
![DCGAN输入噪声算术运算](img/ch7/7.4.3-2.png)
### 7.4.4 GAN为什么容易训练崩溃
@ -292,11 +292,11 @@ $$
$$
L=-{\rm E}_{x\sim{p_{data}}(x)}[f_w(x)] + {\rm E}_{x\sim{p_g}(x)}[f_w(x)]+\lambda{\rm E}_{x\sim{p_x}(x)}[\lVert\nabla_x(D(x))\rVert_p-1]^2
由于上式是对每一个梯度进行惩罚所以不适合使用BN因为它会引入同个batch中不同样本的相互依赖关系。如果需要的话可以选择Layer Normalization。实际训练过程中就可以通过Wasserstein距离来度量模型收敛程度了
![Wass距离随迭代次数变化](./img/ch7/Wass%E8%B7%9D%E7%A6%BB%E9%9A%8F%E8%BF%AD%E4%BB%A3%E6%AC%A1%E6%95%B0%E5%8F%98%E5%8C%96.png)
![Wass距离随迭代次数变化](img/ch7/Wass%E8%B7%9D%E7%A6%BB%E9%9A%8F%E8%BF%AD%E4%BB%A3%E6%AC%A1%E6%95%B0%E5%8F%98%E5%8C%96.png)
上图纵坐标是Wasserstein距离横坐标是迭代次数。可以看出随着迭代的进行Wasserstein距离趋于收敛生成图像也趋于稳定。
$$
由于上式是对每一个梯度进行惩罚所以不适合使用BN因为它会引入同个batch中不同样本的相互依赖关系。如果需要的话可以选择Layer Normalization。实际训练过程中就可以通过Wasserstein距离来度量模型收敛程度了
![Wass距离随迭代次数变化](./img/ch7/Wass%E8%B7%9D%E7%A6%BB%E9%9A%8F%E8%BF%AD%E4%BB%A3%E6%AC%A1%E6%95%B0%E5%8F%98%E5%8C%96.png)
![Wass距离随迭代次数变化](img/ch7/Wass%E8%B7%9D%E7%A6%BB%E9%9A%8F%E8%BF%AD%E4%BB%A3%E6%AC%A1%E6%95%B0%E5%8F%98%E5%8C%96.png)
上图纵坐标是Wasserstein距离横坐标是迭代次数。可以看出随着迭代的进行Wasserstein距离趋于收敛生成图像也趋于稳定。
### 7.4.7 LSGAN
@ -311,7 +311,7 @@ $$
$$
实际实现的时候非常简单最后一层去掉sigmoid并且计算Loss的时候用平方误差即可。之所以这么做作者在原文给出了一张图:
![LSGAN交叉熵与最小二乘损失对比图](./img/ch7/lsgan loss compare.png)
![LSGAN交叉熵与最小二乘损失对比图](img/ch7/lsgan loss compare.png)
上面是作者给出的基于交叉熵损失以及最小二乘损失的Loss函数。横坐标代表Loss函数的输入纵坐标代表输出的Loss值。可以看出随着输入的增大sigmoid交叉熵损失很快趋于0容易导致梯度饱和问题。如果使用右边的Loss设计则只在x=0点处饱和。因此使用LSGAN可以很好的解决交叉熵损失的问题。
### 7.4.8 如何尽量避免GAN的训练崩溃问题
@ -353,7 +353,7 @@ $$
### 7.3.2 有监督图像翻译pix2pix
在这篇paper里面作者提出的框架十分简洁优雅好用的算法总是简洁优雅的。相比以往算法的大量专家知识手工复杂的loss。这篇paper非常粗暴使用CGAN处理了一系列的转换问题。下面是一些转换示例
![pix2pix结果示例](./img/ch7/pix2pix结果示例.png)
![pix2pix结果示例](img/ch7/pix2pix结果示例.png)
上面展示了许多有趣的结果,比如分割图$\longrightarrow$街景图,边缘图$\longrightarrow$真实图。对于第一次看到的时候还是很惊艳的,那么这个是怎么做到的呢?我们可以设想一下,如果是我们,我们自己会如何设计这个网络?
@ -361,12 +361,12 @@ $$
最直接的想法就是设计一个CNN网络直接建立输入-输出的映射,就像图像去噪问题一样。可是对于上面的问题,这样做会带来一个问题。**生成图像质量不清晰。**
拿左上角的分割图$\longrightarrow$街景图为例,语义分割图的每个标签比如“汽车”可能对应不同样式,颜色的汽车。那么模型学习到的会是所有不同汽车的评均,这样会造成模糊。![pix2pix语义地图L1loss结果](./img/ch7/pix2pix语义地图L1loss结果.png)
拿左上角的分割图$\longrightarrow$街景图为例,语义分割图的每个标签比如“汽车”可能对应不同样式,颜色的汽车。那么模型学习到的会是所有不同汽车的评均,这样会造成模糊。![pix2pix语义地图L1loss结果](img/ch7/pix2pix语义地图L1loss结果.png)
**如何解决生成图像的模糊问题**
这里作者想了一个办法即加入GAN的Loss去惩罚模型。GAN相比于传统生成式模型可以较好的生成高分辨率图片。思路也很简单在上述直观想法的基础上加入一个判别器判断输入图片是否是真实样本。模型示意图如下
![pix2pix模型示意图](./img/ch7/pix2pix模型示意图.png)
![pix2pix模型示意图](img/ch7/pix2pix模型示意图.png)
上图模型和CGAN有所不同但它是一个CGAN只不过输入只有一个这个输入就是条件信息。原始的CGAN需要输入随机噪声以及条件。这里之所有没有输入噪声信息是因为在实际实验中如果输入噪声和条件噪声往往被淹没在条件C当中所以这里直接省去了。
@ -392,7 +392,7 @@ $$
### 7.3.5 有监督的图像翻译的缺点?
许多图像翻译算法如前面提及的pix2pix系列需要一一对应的图像。可是在许多应用场景下往往没有这种一一对应的强监督信息。比如说以下一些应用场景
![CycleGAN结果例子](./img/ch7/CycleGAN结果例子.png)
![CycleGAN结果例子](img/ch7/CycleGAN结果例子.png)
以第一排第一幅图为例,要找到这种一一配对的数据是不现实的。因此,无监督图像翻译算法就被引入了。
### 7.3.6 无监督图像翻译CycleGAN
@ -405,7 +405,7 @@ b. B->fake_A->rec_B
对于A域的所有图像学习一个网络G_B该网络可以生成B。对于B域的所有图像也学习一个网络G_A该网络可以生成G_B。
训练过程分成两步首先对于A域的某张图像送入G_B生成fake_B然后对fake_B送入G_A得到重构后的A图像rec_A。对于B域的某一张图像也是类似。重构后的图像rec_A/rec_B可以和原图A/B做均方误差实现了有监督的训练。此处值得注意的是A->fake_B(B->fake_A)和fake_A->rec_B(fake_B->rec_A)的网络是一模一样的。下图是形象化的网络结构图:
![CycleGAN模型示意图](./img/ch7/CycleGAN模型示意图.png)
![CycleGAN模型示意图](img/ch7/CycleGAN模型示意图.png)
cycleGAN的生成器采用U-Net判别器采用LS-GAN。
**Loss设计**
@ -439,7 +439,7 @@ cycleGAN模型较好的解决了无监督图像转换问题可是这种单一
seqGAN在GAN的框架下结合强化学习来做文本生成。 模型示意图如下:
![seqGAN模型](./img/ch7/seqGAN模型.png)
![seqGAN模型](img/ch7/seqGAN模型.png)
在文本生成任务seqGAN相比较于普通GAN区别在以下几点
- 生成器不取argmax。
@ -452,7 +452,7 @@ cycleGAN模型较好的解决了无监督图像转换问题可是这种单一
GAN的良好生成特性近年来也开始被用于数据增广。以行人重识别为例有许多GAN用于数据增广的工作[1-4]。行人重识别问题一个难点在于不同摄像头下拍摄的人物环境角度差别非常大导致存在较大的Domain gap。因此可以考虑使用GAN来产生不同摄像头下的数据进行数据增广。以论文[1]为例本篇paper提出了一个cycleGAN用于数据增广的方法。具体模型结构如下
![cycleGAN数据增广](./img/ch7/cycleGAN数据增广.png)
![cycleGAN数据增广](img/ch7/cycleGAN数据增广.png)
对于每一对摄像头都训练一个cycleGAN这样就可以实现将一个摄像头下的数据转换成另一个摄像头下的数据但是内容人物保持不变。
在CVPR19中[9]进一步提升了图像的生成质量,进行了“淘宝换衣”式的高质量图像生成(如下图),提供了更高质量的行人训练数据。

View File

@ -18,7 +18,7 @@
**分割-Segmentation**分为实例的分割Instance-level和场景分割Scene-level解决“每一个像素属于哪个目标物或场景”的问题。
![图像识别四大类任务图像来源于cs231n 2016课件Lecture 8](./img/ch8/8.1.1.png)
![图像识别四大类任务图像来源于cs231n 2016课件Lecture 8](img/ch8/8.1.1.png)
### 8.1.2 目标检测要解决的核心问题?
@ -50,7 +50,7 @@
常见的one stage目标检测算法有OverFeat、YOLOv1、YOLOv2、YOLOv3、SSD和RetinaNet等。
![](./img/ch8/8.1.2.png)
![](img/ch8/8.1.2.png)
### 8.1.4 目标检测有哪些应用?
@ -71,7 +71,7 @@
R-CNN作为R-CNN系列的第一代算法其实没有过多的使用“深度学习”思想而是将“深度学习”和传统的“计算机视觉”的知识相结合。比如R-CNN pipeline中的第二步和第四步其实就属于传统的“计算机视觉”技术。使用selective search提取region proposals使用SVM实现分类。
![](./img/ch8/8.2.1-1.png)
![](img/ch8/8.2.1-1.png)
原论文中R-CNN pipeline只有4个步骤光看上图无法深刻理解R-CNN处理机制下面结合图示补充相应文字
@ -81,19 +81,19 @@
3. 提取 proposals并计算CNN 特征。利用选择性搜索Selective Search算法提取所有proposals大约2000幅images调整resize/warp它们成固定大小以满足 CNN输入要求因为全连接层的限制然后将feature map 保存到本地磁盘。
![](./img/ch8/8.1.4.png)
![](img/ch8/8.1.4.png)
4. 训练SVM。利用feature map 训练SVM来对目标和背景进行分类每个类一个二进制SVM
5. 边界框回归Bounding boxes Regression。训练将输出一些校正因子的线性回归分类器
![](./img/ch8/8.1.5.png)
![](img/ch8/8.1.5.png)
**R-CNN 实验结果**
R-CNN在VOC 2007测试集上mAP达到58.5%,打败当时所有的目标检测算法。
![](./img/ch8/8.1.6.png)
![](img/ch8/8.1.6.png)
### 8.2.2 Fast R-CNN
@ -111,7 +111,7 @@ R-CNN在VOC 2007测试集上mAP达到58.5%,打败当时所有的目标检测
将候选区域直接应用于特征图并使用RoI池化将其转化为固定大小的特征图块。以下是Fast R-CNN的流程图
![](./img/ch8/8.2.2-1.png)
![](img/ch8/8.2.2-1.png)
**RoI Pooling层详解**
@ -123,7 +123,7 @@ RoI Pooling 是Pooling层的一种而且是针对RoI的Pooling其特点是
RoI是Region of Interest的简写一般是指图像上的区域框但这里指的是由Selective Search提取的候选框。
![](./img/ch8/8.2.2-2.png)
![](img/ch8/8.2.2-2.png)
往往经过RPN后输出的不止一个矩形框所以这里我们是对多个RoI进行Pooling。
@ -156,40 +156,40 @@ RoI是Region of Interest的简写一般是指图像上的区域框但这
**RoI Pooling示例**
![](./img/ch8/8.1.11.gif)
![](img/ch8/8.1.11.gif)
### 8.2.3 Faster R-CNN
**Faster R-CNN有哪些创新点**
Fast R-CNN依赖于外部候选区域方法如选择性搜索。但这些算法在CPU上运行且速度很慢。在测试中Fast R-CNN需要2.3秒来进行预测其中2秒用于生成2000个ROI。Faster R-CNN采用与Fast R-CNN相同的设计只是它用内部深层网络代替了候选区域方法。新的候选区域网络RPN在生成ROI时效率更高并且以每幅图像10毫秒的速度运行。
![](./img/ch8/8.2.3-1.png)
![](img/ch8/8.2.3-1.png)
图8.1.13 Faster R-CNN的流程图
Faster R-CNN的流程图与Fast R-CNN相同采用外部候选区域方法代替了内部深层网络。
![](./img/ch8/8.2.3-2.png)
![](img/ch8/8.2.3-2.png)
图8.1.14
**候选区域网络**
候选区域网络RPN将第一个卷积网络的输出特征图作为输入。它在特征图上滑动一个3×3的卷积核以使用卷积网络如下所示的ZF网络构建与类别无关的候选区域。其他深度网络如VGG或ResNet可用于更全面的特征提取但这需要以速度为代价。ZF网络最后会输出256个值它们将馈送到两个独立的全连接层以预测边界框和两个objectness分数这两个objectness分数度量了边界框是否包含目标。我们其实可以使用回归器计算单个objectness分数但为简洁起见Faster R-CNN使用只有两个类别的分类器即带有目标的类别和不带有目标的类别。
![](./img/ch8/8.2.3-3.png)
![](img/ch8/8.2.3-3.png)
图8.1.15
对于特征图中的每一个位置RPN会做k次预测。因此RPN将输出4×k个坐标和每个位置上2×k个得分。下图展示了8×8的特征图且有一个3×3的卷积核执行运算它最后输出8×8×3个ROI其中k=3。下图展示了单个位置的3个候选区域。
![](./img/ch8/8.2.3-4.png)
![](img/ch8/8.2.3-4.png)
图8.1.16
假设最好涵盖不同的形状和大小。因此Faster R-CNN不会创建随机边界框。相反它会预测一些与左上角名为锚点的参考框相关的偏移量如x, y。我们限制这些偏移量的值因此我们的猜想仍然类似于锚点。
![](./img/ch8/8.1.17.png)
![](img/ch8/8.1.17.png)
图8.1.17
要对每个位置进行k个预测我们需要以每个位置为中心的k个锚点。每个预测与特定锚点相关联但不同位置共享相同形状的锚点。
![](./img/ch8/8.2.3-6.png)
![](img/ch8/8.2.3-6.png)
图8.1.18
这些锚点是精心挑选的,因此它们是多样的,且覆盖具有不同比例和宽高比的现实目标。这使得我们可以用更好的猜想来指导初始训练,并允许每个预测专门用于特定的形状。该策略使早期训练更加稳定和简便。
![](./img/ch8/8.2.3-7.png)
![](img/ch8/8.2.3-7.png)
图8.1.19
Faster R-CNN使用更多的锚点。它部署9个锚点框3个不同宽高比的3个不同大小的锚点Anchor框。每一个位置使用9个锚点每个位置会生成2×9个objectness分数和4×9个坐标。
@ -212,31 +212,31 @@ ResNet-101+R-FCN83.6% in PASCAL VOC 2007 test datasets
既提高了mAP又加快了检测速度
假设我们只有一个特征图用来检测右眼。那么我们可以使用它定位人脸吗应该可以。因为右眼应该在人脸图像的左上角所以我们可以利用这一点定位整个人脸。如果我们还有其他用来检测左眼、鼻子或嘴巴的特征图那么我们可以将检测结果结合起来更好地定位人脸。现在我们回顾一下所有问题。在Faster R-CNN中检测器使用了多个全连接层进行预测。如果有2000个ROI那么成本非常高。R-FCN通过减少每个ROI所需的工作量实现加速。上面基于区域的特征图与ROI是独立的可以在每个ROI之外单独计算。剩下的工作就比较简单了因此R-FCN的速度比Faster R-CNN快。
![](./img/ch8/8.2.4-1.png)
![](img/ch8/8.2.4-1.png)
图8.2.1 人脸检测
现在我们来看一下5×5的特征图M内部包含一个蓝色方块。我们将方块平均分成3×3个区域。现在我们在M中创建了一个新的特征图来检测方块的左上角TL。这个新的特征图如下图所示。只有黄色的网格单元[2,2]处于激活状态。在左侧创建一个新的特征图,用于检测目标的左上角。
![](./img/ch8/8.2.4-2.png)
![](img/ch8/8.2.4-2.png)
图8.2.2 检测示例
我们将方块分成9个部分由此创建了9个特征图每个用来检测对应的目标区域。这些特征图叫做位置敏感得分图position-sensitive score map因为每个图检测目标的子区域计算其得分
![](./img/ch8/8.2.4-3.png)
![](img/ch8/8.2.4-3.png)
图8.2.3生成9个得分图
下图中红色虚线矩形是建议的ROI。我们将其分割成3×3个区域并询问每个区域包含目标对应部分的概率是多少。例如左上角ROI区域包含左眼的概率。我们将结果存储成3×3 vote数组如下图所示。例如vote_array[0][0]包含左上角区域是否包含目标对应部分的得分。
![](./img/ch8/8.2.4-4.png)
![](img/ch8/8.2.4-4.png)
图8.2.4
将ROI应用到特征图上输出一个3x3数组。将得分图和ROI映射到vote数组的过程叫做位置敏感ROI池化position-sensitive ROI-pool。该过程与前面讨论过的ROI池化非常接近。
![](./img/ch8/8.2.4-5.png)
![](img/ch8/8.2.4-5.png)
图8.2.5
将ROI的一部分叠加到对应的得分图上计算V[i][j]。在计算出位置敏感ROI池化的所有值后类别得分是其所有元素得分的平均值。
![](./img/ch8/8.2.6.png)
![](img/ch8/8.2.6.png)
图8.2.6 ROI池化
假如我们有C个类别要检测。我们将其扩展为C+1个类别这样就为背景非目标增加了一个新的类别。每个类别有3×3个得分图因此一共有(C+1)×3×3个得分图。使用每个类别的得分图可以预测出该类别的类别得分。然后我们对这些得分应用 softmax 函数计算出每个类别的概率。以下是数据流图在本案例中k=3。
![](./img/ch8/8.2.7.png)
![](img/ch8/8.2.7.png)
图8.2.7
### 8.2.5 FPN
@ -490,13 +490,13 @@ COCO数据集上的结果。看来提升还是有的。但是也能看出
不同于前面的R-CNN系列SSD属于one-stage方法。SSD使用 VGG16 网络作为特征提取器(和 Faster R-CNN 中使用的 CNN 一样将后面的全连接层替换成卷积层并在之后添加自定义卷积层并在最后直接采用卷积进行检测。在多个特征图上设置不同缩放比例和不同宽高比的先验框以融合多尺度特征图进行检测靠前的大尺度特征图可以捕捉到小物体的信息而靠后的小尺度特征图能捕捉到大物体的信息从而提高检测的准确性和定位的准确性。如下图是SSD的网络结构图。
![](./img/ch8/SSD-01.png)
![](img/ch8/SSD-01.png)
**1. 怎样设置default boxes**
SSD中default box的概念有点类似于Faster R-CNN中的anchor。不同于Faster R-CNN只在最后一个特征层取anchor, SSD在多个特征层上取default box可以得到不同尺度的default box。在特征图的每个单元上取不同宽高比的default box,一般宽高比在{1,2,3,1/2,1/3}中选取有时还会额外增加一个宽高比为1但具有特殊尺度的box。如下图所示在8x8的feature map和4x4的feature map上的每个单元取4个不同的default box。原文对于300x300的输入分别在conv4_3, conv7,conv8_2,conv9_2,conv10_2,conv11_2的特征图上的每个单元取4,6,6,6,4,4个default box. 由于以上特征图的大小分别是38x38,19x19,10x10,5x5,3x3,1x1所以一共得到38x38x4+19x19x6+10x10x6+5x5x6+
3x3x4+1x1x4=8732个default box.对一张300x300的图片输入网络将会针对这8732个default box预测8732个边界框。
![](./img/ch8/SSD-02.png)
![](img/ch8/SSD-02.png)
**2. 怎样对先验框进行匹配?**
SSD在训练的时候只需要输入图像和图像中每个目标对应的ground truth. 先验框与ground truth 的匹配遵循两个原则:
@ -553,7 +553,7 @@ YOLOYou Only Look Once: Unified, Real-Time Object Detection是one-stage de
YOLO创造性的将物体检测任务直接当作回归问题regression problem来处理将候选区和检测两个阶段合二为一。只需一眼就能知道每张图像中有哪些物体以及物体的位置。下图展示了各物体检测系统的流程图。
![](./img/ch8/YOLOv1-01.png)
![](img/ch8/YOLOv1-01.png)
事实上YOLO也并没有真正的去掉候选区而是直接将输入图片划分成7x7=49个网格每个网格预测两个边界框一共预测49x2=98个边界框。可以近似理解为在输入图片上粗略的选取98个候选区这98个候选区覆盖了图片的整个区域进而用回归预测这98个候选框对应的边界框。
@ -561,7 +561,7 @@ YOLO创造性的将物体检测任务直接当作回归问题regression probl
YOLO网络借鉴了GoogLeNet分类网络结构不同的是YOLO使用1x1卷积层和3x3卷积层替代inception module。如下图所示整个检测网络包括24个卷积层和2个全连接层。其中卷积层用来提取图像特征全连接层用来预测图像位置和类别概率值。
![](./img/ch8/YOLOv1-02.png)
![](img/ch8/YOLOv1-02.png)
**2. YOLO的输入、输出、损失函数分别是什么**
@ -570,7 +570,7 @@ YOLO网络借鉴了GoogLeNet分类网络结构不同的是YOLO使用1x1卷积
YOLO将输入图像分成7x7的网格每个网格预测2个边界框。若某物体的ground truth的中心落在该网格则该网格中与这个ground truth IOU最大的边界框负责预测该物体。对每个边界框会预测5个值分别是边界框的中心x,y相对于所属网格的边界边界框的宽高w,h相对于原始输入图像的宽高的比例以及这些边界框的confidencescores边界框与ground truth box的IOU值。同时每个网格还需要预测c个类条件概率 是一个c维向量表示某个物体object在这个网格中且该object分别属于各个类别的概率这里的c类物体不包含背景。论文中的c=20则每个网格需要预测2x5+20=30个值这些值被映射到一个30维的向量。
为了让边界框坐标损失、分类损失达到很好的平衡,损失函数设计如下图所示。
![](./img/ch8/YOLOv1-03.png)
![](img/ch8/YOLOv1-03.png)
如上图所示损失函数分为坐标预测蓝色框、含有物体的边界框的confidence预测红色框、不含有物体的边界框的confidence预测黄色框、分类预测紫色框四个部分。
@ -584,7 +584,7 @@ YOLO最后采用非极大值抑制NMS算法从输出结果中提取最有
输入一张图片到YOLO网络将输出一个7*7*30的张量表示图片中每个网格对应的可能的两个边界框以及每个边界框的置信度和包含的对象属于各个类别的概率。由此可以计算某对象i属于类别 同时在第j个边界框中的得分
![](./img/ch8/YOLOv1-04.png)
![](img/ch8/YOLOv1-04.png)
每个网格有20个类条件概率2个边界框置信度相当于每个网格有40个得分7x7个网格有1960个得分每类对象有1960/20=98个得分即98个候选框。
@ -618,7 +618,7 @@ YOLOv1虽然检测速度快但在定位方面不够准确并且召回率
2. New NetworkDarknet-19
3. 加入anchor
![](./img/ch8/YOLOv2-01.png)
![](img/ch8/YOLOv2-01.png)
**YOLOv2 介绍**
@ -643,13 +643,13 @@ boxes之后YOLOv2可以预测13x13x5=845个边界框模型的召回率由
YOLOv2采用Darknet-19其网络结构如下图所示包括19个卷积层和5个max pooling层主要采用3x3卷积和1x1卷积这里1x1卷积可以压缩特征图通道数以降低模型计算量和参数每个卷积层后使用BN层以加快模型收敛同时防止过拟合。最终采用global avg pool 做预测。采用YOLOv2模型的mAP值没有显著提升但计算量减少了。
![](./img/ch8/YOLOv2-02.png)
![](img/ch8/YOLOv2-02.png)
**6Direct location prediction**
Faster R-CNN使用anchor boxes预测边界框相对先验框的偏移量由于没有对偏移量进行约束每个位置预测的边界框可以落在图片任何位置会导致模型不稳定加长训练时间。YOLOv2沿用YOLOv1的方法根据所在网格单元的位置来预测坐标,则Ground Truth的值介于0到1之间。网络中将得到的网络预测结果再输入sigmoid函数中让输出结果介于0到1之间。设一个网格相对于图片左上角的偏移量是cxcy。先验框的宽度和高度分别是pw和ph则预测的边界框相对于特征图的中心坐标(bxby)和宽高bw、bh的计算公式如下图所示。
![](./img/ch8/YOLOv2-03.png)
![](img/ch8/YOLOv2-03.png)
YOLOv2结合Dimention Clusters, 通过对边界框的位置预测进行约束使模型更容易稳定训练这种方式使得模型的mAP值提升了约5%。
@ -690,7 +690,7 @@ WordTree的生成方式如下
③迭代地检查剩下的名词,取它到根节点的最短路径,将该最短路径上的还没出现在层次树中的词加入到树中。
混合后的数据集形成一个有9418类的WordTree.生成的WordTree模型如下图所示。另外考虑到COCO数据集相对于ImageNet数据集数据量太少了为了平衡两个数据集作者进一步对COCO数据集过采样使COCO数据集与ImageNet数据集的数据量比例接近14。
![](./img/ch8/YOLOv2-04.png)
![](img/ch8/YOLOv2-04.png)
对于物体的标签采用one-hot编码的形式数据集中的每个物体的类别标签被组织成1个长度为9418的向量向量中除在WordTree中从该物体对应的名词到根节点的路径上出现的词对应的类别标号处为1其余位置为0。
@ -718,17 +718,17 @@ YOLOv3总结了自己在YOLOv2的基础上做的一些尝试性改进有的
YOLOv3在之前Darknet-19的基础上引入了残差块并进一步加深了网络改进后的网络有53个卷积层取名为Darknet-53网络结构如下图所示以256*256的输入为例
![](./img/ch8/YOLOv3-01.png)
![](img/ch8/YOLOv3-01.png)
为了比较Darknet-53与其它网络结构的性能作者在TitanX上采用相同的实验设置将256x256的图片分别输入以Darknet-19ResNet-101ResNet-152和Darknet-53为基础网络的分类模型中实验得到的结果如下图所示。可以看到Darknet-53比ResNet-101的性能更好而且速度是其1.5倍Darknet-53与ResNet-152性能相似但速度几乎是其2倍。注意到Darknet-53相比于其它网络结构实现了每秒最高的浮点计算量说明其网络结构能更好的利用GPU。
![](./img/ch8/YOLOv3-02.png)
![](img/ch8/YOLOv3-02.png)
**2.YOLOv3中怎样实现多尺度检测**
YOLOv3借鉴了FPN的思想从不同尺度提取特征。相比YOLOv2YOLOv3提取最后3层特征图不仅在每个特征图上分别独立做预测同时通过将小特征图上采样到与大的特征图相同大小然后与大的特征图拼接做进一步预测。用维度聚类的思想聚类出9种尺度的anchor box将9种尺度的anchor box均匀的分配给3种尺度的特征图.如下图是在网络结构图的基础上加上多尺度特征提取部分的示意图以在COCO数据集(80类)上256x256的输入为例
![](./img/ch8/YOLOv3-03.png)
![](img/ch8/YOLOv3-03.png)
从YOLOv1到YOLOv2再到YOLO9000、YOLOv3, YOLO经历三代变革在保持速度优势的同时不断改进网络结构同时汲取其它优秀的目标检测算法的各种trick先后引入anchor box机制、引入FPN实现多尺度检测等。
@ -739,7 +739,7 @@ YOLOv3借鉴了FPN的思想从不同尺度提取特征。相比YOLOv2YOLOv
- Two-Stage检测器如Faster R-CNN、FPN效果好但速度相对慢
- One-Stage检测器如YOLO、SSD速度快但效果一般
![](./img/ch8/RetinaNet-01.png)
![](img/ch8/RetinaNet-01.png)
作者对one-stage检测器准确率不高的问题进行探究发现主要问题在于正负类别不均衡简单-难分类别不均衡)。
@ -781,13 +781,13 @@ $$
Focal Loss更加聚焦在困难样本hard examples上的训练。
![](./img/ch8/RetinaNet-02.png)
![](img/ch8/RetinaNet-02.png)
将Focal Loss与ResNet-101-FPN backbone结合提出RetinaNetone-stage检测器RetinaNet在COCO test-dev上达到39.1mAP速度为5FPS。
RetinaNet检测器与当时最佳的其它检测器进行比较无论是速度上还是准确率上都是最佳
![](./img/ch8/RetinaNet-03.png)
![](img/ch8/RetinaNet-03.png)
**详解:**
@ -799,13 +799,13 @@ RetinaNet检测器与当时最佳的其它检测器进行比较无论是速
首先是我们常使用的交叉熵损失函数:
![](./img/ch8/RetinaNet-04.png)
![](img/ch8/RetinaNet-04.png)
上式中y=+1或者y=-1。p∈[0,1]是y=+1的估计概率。作者定义pt为
![](./img/ch8/RetinaNet-05.png)
![](img/ch8/RetinaNet-05.png)
![](./img/ch8/RetinaNet-06.png)
![](img/ch8/RetinaNet-06.png)
注:对交叉熵函数不了解的,可以参考[理解交叉熵作为损失函数在神经网络中的作用](https://blog.csdn.net/chaipp0607/article/details/73392175)
@ -813,7 +813,7 @@ RetinaNet检测器与当时最佳的其它检测器进行比较无论是速
要对类别不均衡问题对loss的贡献进行一个控制即加上一个控制权重即可最初作者的想法即如下这样对于属于少数类别的样本增大α即可
![](./img/ch8/RetinaNet-07.png)
![](img/ch8/RetinaNet-07.png)
但这样有一个问题,它仅仅解决了正负样本之间的平衡问题,并没有区分易分/难分样本,按作者的话说:
@ -829,7 +829,7 @@ RetinaNet检测器与当时最佳的其它检测器进行比较无论是速
$$
(1-pt)^γ(1pt)γ
$$
![](./img/ch8/RetinaNet-08.png)
![](img/ch8/RetinaNet-08.png)
显然样本越易分pt就越大pt—>1modulating factor趋近于0则贡献的loss就越小同样地样本越难分其pt就越小modulating factor接近于1则贡献的loss不受影响。
@ -847,7 +847,7 @@ $$
在实际中,作者采用如下公式,即综合了公式(3)和公式(4)的形式,这样机能调整正负样本的权重,又能控制难易分类样本的权重:
![](./img/ch8/RetinaNet-09.png)
![](img/ch8/RetinaNet-09.png)
这里的两个参数 α和γ 来控制在实验中a的选择范围也很广一般而言当γ增加的时候a需要减小一点本文作者采用α=0.25γ=2效果最好。
@ -857,7 +857,7 @@ RetinaNet是由backbone网络和两个特殊任务的子网络subnet组成
**Feature Pyramid Network Backbone**
![](./img/ch8/RetinaNet-10.png)
![](img/ch8/RetinaNet-10.png)
**Anchor**
@ -865,9 +865,9 @@ RetinaNet是由backbone网络和两个特殊任务的子网络subnet组成
**Box Regression Subnet**
![](./img/ch8/RetinaNet-11.png)
![](img/ch8/RetinaNet-11.png)
![](./img/ch8/RetinaNet-12.png)
![](img/ch8/RetinaNet-12.png)
RetinaNet结构注意内容
@ -882,9 +882,9 @@ RetinaNet结构注意内容
Table1是关于RetinaNet和Focal Loss的一些实验结果。a是在交叉熵的基础上加上参数aa=0.5就表示传统的交叉熵可以看出当a=0.75的时候效果最好AP值提升了0.9。b是对比不同的参数γ和a的实验结果可以看出随着γ的增加AP提升比较明显。d通过和OHEM的对比可以看出最好的Focal Loss比最好的OHEM提高了3.2AP。这里OHEM1:3表示在通过OHEM得到的minibatch上强制positive和negative样本的比例为1:3通过对比可以看出这种强制的操作并没有提升AP。e加入了运算时间的对比可以和前面的Figure2结合起来看速度方面也有优势注意这里RetinaNet-101-800的AP是37.8当把训练时间扩大1.5倍同时采用scale jitterAP可以提高到39.1这就是全文和table2中的最高的39.1AP的由来。
![](./img/ch8/RetinaNet-13.png)
![](img/ch8/RetinaNet-13.png)
![](./img/ch8/RetinaNet-14.png)
![](img/ch8/RetinaNet-14.png)
### 8.3.8 RFBNet
@ -969,11 +969,11 @@ $$X_i = Concat(X_{1i}, X_{2i}, ...., X_{Li}) \in R^{W_i \times H_i \times C}$$
2缩放滑动窗的大小如图8.4.2所示)。
![](./img/ch8/8.4.1.png)
![](img/ch8/8.4.1.png)
图 8.1 图像金字塔
![](./img/ch8/8.4.2.png)
![](img/ch8/8.4.2.png)
图 8.2 缩放滑动窗口
@ -983,7 +983,7 @@ $$X_i = Concat(X_{1i}, X_{2i}, ...., X_{Li}) \in R^{W_i \times H_i \times C}$$
2通过anchor box的方法如图8.3所示不要和图8.2混淆这里是通过特征图预测原图的anchor box区域具体在facebox中有描述
![](./img/ch8/8.4.3.png)
![](img/ch8/8.4.3.png)
图 8.3 anchor box
@ -1005,7 +1005,7 @@ $$X_i = Concat(X_{1i}, X_{2i}, ...., X_{Li}) \in R^{W_i \times H_i \times C}$$
滑动窗的方式是基于分类器识别为人脸的框的位置确定最终的人脸,
![](./img/ch8/8.4.4.png)
![](img/ch8/8.4.4.png)
图 8.4 滑动窗
@ -1019,7 +1019,7 @@ $$X_i = Concat(X_{1i}, X_{2i}, ...., X_{Li}) \in R^{W_i \times H_i \times C}$$
### 8.4.5 如何通过一个人脸的多个框确定最终人脸框位置?
![](./img/ch8/8.4.5.png)
![](img/ch8/8.4.5.png)
图 8.5 通过NMS得到最终的人脸位置
@ -1029,7 +1029,7 @@ NMS改进版本有很多最原始的NMS就是判断两个框的交集
1. cascade cnn的框架结构是什么
![](./img/ch8/8.4.6.png)
![](img/ch8/8.4.6.png)
级联结构中有6个CNN3个CNN用于人脸非人脸二分类另外3个CNN用于人脸区域的边框校正。给定一幅图像12-net密集扫描整幅图片拒绝90%以上的窗口。剩余的窗口输入到12-calibration-net中调整大小和位置以接近真实目标。接着输入到NMS中消除高度重叠窗口。下面网络与上面类似。
@ -1056,7 +1056,7 @@ $$
同时对偏移向量三个参数进行校正。
![](./img/ch8/8.4.8.png)
![](img/ch8/8.4.8.png)
3、训练样本应该如何准备
@ -1074,13 +1074,13 @@ $$
### 8.4.7 基于多任务卷积神经网络的人脸检测MTCNN
![](./img/ch8/8.4.9.png)
![](img/ch8/8.4.9.png)
![](./img/ch8/8.4.10.png)
![](img/ch8/8.4.10.png)
![](./img/ch8/8.4.11.png)
![](img/ch8/8.4.11.png)
![](./img/ch8/8.4.12.png)
![](img/ch8/8.4.12.png)
1.MTCNN模型有三个子网络。分别是P-Net,R-Net,O-Net.我想问一下1.模型中的三个input size是指的是同一张图resize到不同尺度下喂给不同模型还是同一张图依次经过三个模型然后是不同的输入尺寸这部分能给我讲一下吗2.每个模型它都有对应三个结果face classification;bounding box;facial landmark这三个在网络上是如何对应的呢
@ -1092,7 +1092,7 @@ $$
### 8.4.8 Facebox
![](./img/ch8/8.4.13.png)
![](img/ch8/8.4.13.png)
**1Rapidly Digested Convolutional Layers(RDCL)**
@ -1113,7 +1113,7 @@ $$
为了anchor密度均衡可以对密度不足的anchor以中心进行偏移加倍如下图所示
![](./img/ch8/8.4.14.png)
![](img/ch8/8.4.14.png)
@ -1125,7 +1125,7 @@ $$
* 数据增强与过拟合
验证是否过拟合的方法画出loss曲线如果训练集loss持续减小但是验证集loss增大就说明是过拟合了。
![](./img/ch8/8.5.1-1.png)
![](img/ch8/8.5.1-1.png)
* 数据增强目的
通过数据增强实现数据更复杂的表征,从而减小验证集和训练集以及最终测试集的差距,让网络更好地学习迁移数据集上的数据分布。这也说明网络不是真正地理解数据,而是记忆数据分布。
@ -1136,7 +1136,7 @@ $$
2重采样增强
主要侧重于新的实例合成。如图像混合mixup特征空间的增强GAN生成图片。一张图看明白
![](./img/ch8/8.5.1-2.png)
![](img/ch8/8.5.1-2.png)
2. **Image Data Augmentation techniques**
@ -1169,7 +1169,7 @@ $$
* Experiment
![](./img/ch8/8.5.1-3.png)
![](img/ch8/8.5.1-3.png)
**随机裁剪**效果最好。
@ -1182,22 +1182,22 @@ $$
* Mixing images
~~就是那篇被ICLR拒稿的采样方法~~直接均值相加混合。
![](./img/ch8/8.5.1-4.png)
![](img/ch8/8.5.1-4.png)
&emsp;&emsp;还有非线性的mixup裁剪如下
![](./img/ch8/8.5.1-5.png)
![](img/ch8/8.5.1-5.png)
&emsp;&emsp;以及随机裁剪的图像混合:
![](./img/ch8/8.5.1-6.png)
![](img/ch8/8.5.1-6.png)
&emsp;&emsp;这些混合方式是十分反人类直觉的,因此可解释性不强。只能说是可能增强了对底层低级特征如线条边缘等的鲁棒性。其实有点没有抓住关键点。
* Random erasing
随机擦除就是类似cutout的思想通过mask的遮挡使得网络能够提高遮挡情况的鲁棒性。需要手工设计的部分包括mask的大小以及生成方式。是一种比较有效的方法。这种方式也需要考量增强的安全性比如MNIST数据集8cutout后可能出问题。
![](./img/ch8/8.5.1-7.png)
![](img/ch8/8.5.1-7.png)
* A note on combining augmentations
组合的增强方式往往是连续变化的,导致数据集的容量会迅速扩大,这对于小数据集领域来说容易发生过拟合 ,所以需要设计合理的搜索算法设计恰当的训练数据集。
@ -1220,7 +1220,7 @@ $$
* Smart Augmentation
两个东西差不多就是上次看到SmartAugment方法。随机采样类内图片进行通道叠加然后输出融合图像学通过梯度下降使得输出图像的类内差距减小没考虑类间关系可能也不便处理
![](./img/ch8/8.5.1-8.png)
![](img/ch8/8.5.1-8.png)
* AutoAugment
谷歌最早做的自学习增强方法走的NAS的思路RL+RNN搜索增强空间还有后来最近发的检测增强也是大同小异基本就是换汤不换药问题在于**搜索空间太大**,复现搜索过于依赖硬件条件(~~普通实验室玩不起~~
@ -1271,7 +1271,7 @@ $$
&emsp;&emsp;上次亚马逊发了个分类的训练trick在CVPR上这次是检测的还没发表。就没什么多说的了下面直接介绍。先看效果如下其实摘要声称的5%是单阶段的yolov3的提升说明单阶段没有RoIPooling阶段很多性质确实不如两阶段因此采用trick很有必要相反两阶段本身结构优于单阶段所以外加的trick提供的如不变性等网络自身能够学习和适应就不起作用了。
![](./img/ch8/8.5.9-1.png)
![](img/ch8/8.5.9-1.png)
2. **Bag of Freebies**
@ -1280,14 +1280,14 @@ $$
2.1 **Visually Coherent Image Mixup for Object Detection**
&emsp;&emsp;先介绍图像分类中的mixup方法作用是提供了训练的正则化应用到图像上如下图将图像作简单的像素值输入mixup的凸函数中得到合成图然后将one-hot编码类似处理得到新的label。
![](./img/ch8/8.5.9-2.png)
![](img/ch8/8.5.9-2.png)
&emsp;&emsp;技术细节:
* 相比于分类的resize为了保证检测图像不畸变影响效果作者选择直接叠加取最大的宽高空白进行灰度填充不进行缩放。
* 选择ab较大如1.5,1.5的Beta分布作为系数来混合图像作者说是相干性视觉图像的更强loss是两张图像物体的loss之和loss计算权重分别是beta分布的系数
![](./img/ch8/8.5.9-3.png)
![](img/ch8/8.5.9-3.png)
@ -1297,7 +1297,7 @@ $$
标签平滑这个讲的不错https://juejin.im/post/5a29fd4051882534af25dc92
![](./img/ch8/8.5.9-4.png)
![](img/ch8/8.5.9-4.png)
&emsp;&emsp;这里进一步改进了一下label smooth的公式而已在原来基础上除了个类别数。
@ -1439,7 +1439,7 @@ soft-NMS、DCN、OHEN、Train from Scratch 、M2Det 、GN 、HRNet 、Libra R-CN
模型表征:划分为以下几个模块:
BackboneResNet等、NeckFPN、DenseHeadAnchorHead、RoIExtractor、RoIHeadBBoxHead/MaskHead
结构图如下:
![](./img/ch8/mmdetection.png)
![](img/ch8/mmdetection.png)
4. **Notice**
* 1x代表12epoch的COCO训练2x类似推导

View File

@ -12,13 +12,13 @@
为图像中的每个像素分配一个类别,如把画面中的所有物体都指出它们各自的类别。
![](./img/ch9/Semantic-01.png)
![](img/ch9/Semantic-01.png)
**2.实例分割**
与语义分割不同实例分割只对特定物体进行类别分配这一点与目标检测有点相似但目标检测输出的是边界框和类别而实例分割输出的是掩膜mask和类别。
![](./img/ch9/Instance-01.png)
![](img/ch9/Instance-01.png)
## 9.2 传统的基于CNN的分割方法缺点
@ -36,7 +36,7 @@
对于一般的分类CNN网络如VGG和Resnet都会在网络的最后加入一些全连接层经过softmax后就可以获得类别概率信息。但是这个概率信息是1维的即只能标识整个图片的类别不能标识每个像素点的类别所以这种全连接方法不适用于图像分割。
而FCN提出可以把后面几个全连接都换成卷积这样就可以获得一张2维的feature map后接softmax层获得每个像素点的分类信息从而解决了分割问题如图4。
![](./img/ch9/figure_9.1.1_2.jpg)
![](img/ch9/figure_9.1.1_2.jpg)
<center>图 4</center>
### 9.3.2 FCN网络结构
@ -44,13 +44,13 @@
FCN对图像进行像素级的分类从而解决了语义级别的图像分割semantic segmentation问题。与经典的CNN在卷积层之后使用全连接层得到固定长度的特征向量进行分类全联接层softmax输出不同FCN可以接受任意尺寸的输入图像采用反卷积层对最后一个卷积层的feature map进行上采样, 使它恢复到输入图像相同的尺寸,从而可以对每个像素都产生了一个预测, 同时保留了原始输入图像中的空间信息, 最后在上采样的特征图上进行逐像素分类。
下图是语义分割所采用的全卷积网络(FCN)的结构示意图:
![](./img/ch9/figure_9.1.2_1.jpg)
![](img/ch9/figure_9.1.2_1.jpg)
### 9.3.3 全卷积网络举例?
通常CNN网络在卷积层之后会接上若干个全连接层, 将卷积层产生的特征图(feature map)映射成一个固定长度的特征向量。以AlexNet为代表的经典CNN结构适合于图像级的分类和回归任务因为它们最后都得到整个输入图像的一个概率向量。
![](./img/ch9/figure_9.1.3_1.jpg)
![](img/ch9/figure_9.1.3_1.jpg)
&emsp;&emsp;
如上图所示:
@ -100,16 +100,16 @@
&emsp;&emsp;
如下图所示FCN将传统CNN中的全连接层转化成卷积层对应CNN网络FCN把最后三层全连接层转换成为三层卷积层:
![](./img/ch9/figure_9.1.7_1.png)
![](img/ch9/figure_9.1.7_1.png)
<center>一个分类网络</center>
![](./img/ch9/figure_9.1.7_2.png)
![](img/ch9/figure_9.1.7_2.png)
<center>变为全卷积网络</center>
![](./img/ch9/figure_9.1.7_3.png)
![](img/ch9/figure_9.1.7_3.png)
<center>End-to-end, pixels-to pixels网络</center>
![](./img/ch9/figure_9.1.7_4.jpg)
![](img/ch9/figure_9.1.7_4.jpg)
@ -132,17 +132,17 @@ Upsampling的操作可以看成是反卷积(deconvolutional),卷积运算的
&emsp;&emsp;
蓝色是反卷积层的input绿色是反卷积层的outputFull padding, transposed Full padding, transposed。
![](./img/ch9/figure_9.1.8_1.png)
![](img/ch9/figure_9.1.8_1.png)
<center>上图中的反卷积input是2×2, output是4×4。 Zero padding, non-unit strides, transposed。</center>
![](./img/ch9/figure_9.1.8_2.png)
![](img/ch9/figure_9.1.8_2.png)
<center>上图中的反卷积input feature map是3×3, 转化后是5×5, output是5×5</center>
### 9.2.8 跳级(skip)结构
&emsp;&emsp;
对CNN的结果做处理得到了dense prediction而作者在试验中发现得到的分割结果比较粗糙所以考虑加入更多前层的细节信息也就是把倒数第几层的输出和最后的输出做一个fusion实际上也就是加和
![](./img/ch9/figure_9.1.9_1.png)
![](img/ch9/figure_9.1.9_1.png)
&emsp;&emsp;
实验表明这样的分割结果更细致更准确。在逐层fusion的过程中做到第三行再往下结果又会变差所以作者做到这里就停了。
@ -168,7 +168,7 @@ Upsampling的操作可以看成是反卷积(deconvolutional),卷积运算的
&emsp;&emsp;
*对于不同尺寸的输入图像各层数据的尺寸heightwidth相应变化深度channel不变。*
![](./img/ch9/figure_9.1.10_1.png)
![](img/ch9/figure_9.1.10_1.png)
&emsp;&emsp;
1全卷积层部分进行特征提取, 提取卷积层3个蓝色层的输出来作为预测21个类别的特征。
@ -178,23 +178,23 @@ Upsampling的操作可以看成是反卷积(deconvolutional),卷积运算的
&emsp;&emsp;&emsp;&emsp;
1) 以经典的AlexNet分类网络为初始化。最后两级是全连接红色参数弃去不用。
![](./img/ch9/figure_9.1.10_2.png)
![](img/ch9/figure_9.1.10_2.png)
&emsp;&emsp;&emsp;&emsp;
2) 从特征小图()预测分割小图(),之后直接升采样为大图。
![](./img/ch9/figure_9.1.10_3.png)
![](img/ch9/figure_9.1.10_3.png)
<center>反卷积橙色的步长为32这个网络称为FCN-32s</center>
&emsp;&emsp;&emsp;&emsp;
3) 升采样分为两次完成橙色×2, 在第二次升采样前把第4个pooling层绿色的预测结果蓝色融合进来。使用跳级结构提升精确性。
![](./img/ch9/figure_9.1.10_4.png)
![](img/ch9/figure_9.1.10_4.png)
<center>第二次反卷积步长为16这个网络称为FCN-16s</center>
&emsp;&emsp;&emsp;&emsp;
4) 升采样分为三次完成橙色×3, 进一步融合了第3个pooling层的预测结果。
![](./img/ch9/figure_9.1.10_5.png)
![](img/ch9/figure_9.1.10_5.png)
<center>第三次反卷积步长为8记为FCN-8s</center>
其他参数:
@ -209,7 +209,7 @@ learning rate0.001。
&emsp;&emsp;
最后一层反卷积固定位bilinear插值不做学习。
![](./img/ch9/figure_9.1.10_6.png)
![](img/ch9/figure_9.1.10_6.png)
### 9.2.10 FCN缺点
@ -233,7 +233,7 @@ learning rate0.001。
&emsp;&emsp;
这篇论文建立了一个更好全卷积方法。我们定义和扩展了这个方法它使用更少的训练图片但产生更精确的分割。
![](./img/ch9/figure_9.2_1.png)
![](img/ch9/figure_9.2_1.png)
&emsp;&emsp;
(1) 使用全卷积神经网络。(全卷积神经网络就是卷积取代了全连接层,全连接层必须固定图像大小而卷积不用,所以这个策略使得,你可以输入任意尺寸的图片,而且输出也是图片,所以这是一个端到端的网络。)
@ -330,7 +330,7 @@ def get_unet():
&emsp;&emsp;
SegNet网络的结构如下图所示
![](./img/ch9/figure_9.3_1.jpg)
![](img/ch9/figure_9.3_1.jpg)
&emsp;&emsp;
SegNet网络结构如图1所示Input为输入图片Output为输出分割的图像不同颜色代表不同的分类。语义分割的重要性就在于不仅告诉你图片中某个东西是什么而且告知你他在图片的位置。我们可以看到是一个对称网络由中间绿色pooling层与红色upsampling层作为分割左边是卷积提取高维特征并通过pooling使图片变小SegNet作者称为Encoder右边是反卷积在这里反卷积与卷积没有区别与upsampling通过反卷积使得图像分类后特征得以重现upsampling使图像变大SegNet作者称为Decoder最后通过Softmax输出不同分类的最大值。这就是大致的SegNet过程下面对这个过程里面使用到的方法进行介绍。
@ -339,7 +339,7 @@ SegNet网络结构如图1所示Input为输入图片Output为输出分割
&emsp;&emsp;
SegNet解码技术如下图所示
![](./img/ch9/figure_9.3_2.jpg)
![](img/ch9/figure_9.3_2.jpg)
&emsp;&emsp;
解码网络使用保存的最大池化索引上采样得到稀疏的特征图将特征图与可训练的解码滤波器族卷积得到致密的特征图。之后进行BN。高维的特征图输入soft-max层对每个像素进行分类得到每个像素属于K类的概率。 图3中右边是FCN的解码技术FCN对编码的特征图进行降维降维后输入到解码网络解码网络中上采样使用反卷积实现上采样的特征图与降维的编码图进行element-wise add得到最终的解码特征图。FCN解码模型需要存储编码特征图在嵌入式设备中内存紧张。
@ -361,13 +361,13 @@ SegNet的Encoder过程中卷积的作用是提取特征SegNet使用的卷
&emsp;&emsp;
举例如下:
![](./img/ch9/figure_9.3_3.png)
![](img/ch9/figure_9.3_3.png)
<center>Dilated Convolution with a 3 x 3 kernel and dilation rate 2</center>
&emsp;&emsp;
下面看一下dilated conv原始论文[4]中的示意图
![](./img/ch9/figure_9.3_4.jpg)
![](img/ch9/figure_9.3_4.jpg)
&emsp;&emsp;
(a) 图对应3x3的1-dilated conv和普通的卷积操作一样(b)图对应3x3的2-dilated conv实际的卷积kernel size还是3x3但是空洞为1也就是对于一个7x7的图像patch只有9个红色的点和3x3的kernel发生卷积操作其余的点略过。也可以理解为kernel的size为7x7但是只有图中的9个点的权重不为0其余都为0。 可以看到虽然kernel size只有3x3但是这个卷积的感受野已经增大到了7x7如果考虑到这个2-dilated conv的前一层是一个1-dilated conv的话那么每个红点就是1-dilated的卷积输出所以感受野为3x3所以1-dilated和2-dilated合起来就能达到7x7的conv,(c)图是4-dilated conv操作同理跟在两个1-dilated和2-dilated conv的后面能达到15x15的感受野。对比传统的conv操作3层3x3的卷积加起来stride为1的话只能达到(kernel-1) * layer+1=7的感受野也就是和层数layer成线性关系而dilated conv的感受野是指数级的增长。
@ -381,7 +381,7 @@ dilated的好处是不做pooling损失信息的情况下加大了感受野
&emsp;&emsp;
RefineNet block的作用就是把不同resolution level的feature map进行融合。网络结构如下
![](./img/ch9/figure_9.4_1.png)
![](img/ch9/figure_9.4_1.png)
&emsp;&emsp;
最左边一栏就是FCN的encoder部分(文中是用的ResNet)先把pretrained ResNet按feature map的分辨率分成四个ResNet blocks然后向右把四个blocks分别作为4个path通过RefineNet block进行融合refine最后得到一个refined feature map(接softmax再双线性插值输出)。
注意除了RefineNet-4所有的RefineNet block都是二输入的用于融合不同level做refine而单输入的RefineNet-4可以看作是先对ResNet的一个task adaptation。
@ -391,7 +391,7 @@ RefineNet block的作用就是把不同resolution level的feature map进行融
&emsp;&emsp;
接下来仔细看一下RefineNet block可以看到主要组成部分是Residual convolution unit, Multi-resolution fusion, Chained residual pooling, Output convolutions. 切记这个block作用是融合多个level的feature map输出单个level的feature map但具体的实现应该是和输入个数、shape无关的。
![](./img/ch9/figure_9.4_2.png)
![](img/ch9/figure_9.4_2.png)
&emsp;&emsp;
Residual convolution unit就是普通的去除了BN的residual unit
@ -414,7 +414,7 @@ Output convolutions就是输出前再加一个RCU。
&emsp;&emsp;
很多State-of-the-art的场景解析框架都是基于FCN的.基于CNN的方法能够增强动态物体的理解但是在无限制词汇和不同场景中仍然面临挑战.举个例子,如下图.
![](./img/ch9/figure_9.6_1.png)
![](img/ch9/figure_9.6_1.png)
&emsp;&emsp;
FCN认为右侧框中是汽车但是实际上是船如果参考上下文的先验知识就会发现左边是一个船屋进而推断是框中是船.FCN存在的主要问题就是不能利用好全局的场景线索。
@ -439,11 +439,11 @@ FCN认为右侧框中是汽车但是实际上是船如果参考上下文
&emsp;&emsp;
总结以上结果发现以上问题部分或者全部与上下文关系和全局信息有关系因此本文提出了PSPNet.框架如下:
![](./img/ch9/figure_9.6_2.png)
![](img/ch9/figure_9.6_2.png)
&emsp;&emsp;
并且加入额外的深度监督 Loss
![](./img/ch9/figure_9.6_3.png)
![](img/ch9/figure_9.6_3.png)
## 9.8 DeepLab系列
@ -486,7 +486,7 @@ DCNN 的分类不变形影响空间精度。DeepLabv2 是采样全连接的 CRF
&emsp;&emsp;
DeepLabv3 论文比较了多种捕获多尺度信息的方式:
![](./img/ch9/figure_9.6_4.png)
![](img/ch9/figure_9.6_4.png)
&emsp;&emsp;
1.Image Pyramid将输入图片放缩成不同比例分别应用在 DCNN 上,将预测结果融合得到最终输出。
@ -516,7 +516,7 @@ deeplab V3新设计的aspp结构解决了问题1deeplab v3+主要目的在于
&emsp;&emsp;
解决方案1、编解码器结构2 Modified Aligned Xception
![](./img/ch9/figure_9.6_5.png)
![](img/ch9/figure_9.6_5.png)
&emsp;&emsp;
在deeplabv3基础上加入解码器。A是aspp结构其中8x的上采样可以看做是一个解码器。B是编解码结构它集合了高层和底层的特征。C就是本文采取的结构。
@ -525,7 +525,7 @@ deeplab V3新设计的aspp结构解决了问题1deeplab v3+主要目的在于
&emsp;&emsp;
1Encoder-Decoder with Atrous Convolution
![](./img/ch9/figure_9.6_6.png)
![](img/ch9/figure_9.6_6.png)
&emsp;&emsp;
编码器采用deeplabv3。
@ -538,7 +538,7 @@ deeplab V3新设计的aspp结构解决了问题1deeplab v3+主要目的在于
&emsp;&emsp;
Xception主要采用了deepwish seperable convolution来替换原来的卷积层。简单的说就是这种结构能在更少参数更少计算量的情况下学到同样的信息。这边则是考虑将原来的resnet-101骨架网换成xception。
![](./img/ch9/figure_9.6_7.png)
![](img/ch9/figure_9.6_7.png)
&emsp;&emsp;
**红色部分为修改**
@ -551,7 +551,7 @@ Xception主要采用了deepwish seperable convolution来替换原来的卷积层
## 9.9 Mask-R-CNN
### 9.9.1 Mask-RCNN 的网络结构示意图
![](./img/ch9/figure_9.8_1.png)
![](img/ch9/figure_9.8_1.png)
&emsp;&emsp;
其中黑色部分为原来的Faster-RCNN红色部分为在Faster网络上的修改
@ -575,7 +575,7 @@ Xception主要采用了deepwish seperable convolution来替换原来的卷积层
&emsp;&emsp;
来看下后面两种RCNN方法与Mask结合的示意图:
![](./img/ch9/figure_9.8_2.png)
![](img/ch9/figure_9.8_2.png)
&emsp;&emsp;
图中灰色部分是原来的RCNN结合ResNet or FPN的网络下面黑色部分为新添加的并联Mask层这个图本身与上面的图也没有什么区别旨在说明作者所提出的Mask RCNN方法的泛化适应能力可以和多种RCNN框架结合表现都不错。
@ -605,13 +605,13 @@ $Lmask(Cls_k) = Sigmoid (Cls_k)$,平均二值交叉熵 average binary cross
&emsp;&emsp;
Why K个mask通过对每个 Class 对应一个Mask可以有效避免类间竞争其他Class不贡献Loss
![](./img/ch9/figure_9.8_3.png)
![](img/ch9/figure_9.8_3.png)
&emsp;&emsp;
通过结果对比来看Table2 b也就是作者所说的 Decouple 解耦要比多分类的Softmax效果好很多。
&emsp;&emsp;
另外作者给出了很多实验分割效果就不都列了只贴一张和FCIS的对比图FCIS出现了Overlap的问题
![](./img/ch9/figure_9.8_4.png)
![](img/ch9/figure_9.8_4.png)
## 9.10 CNN在基于弱监督学习的图像分割中的应用
@ -638,11 +638,11 @@ Why K个mask通过对每个 Class 对应一个Mask可以有效避免类间竞
&emsp;&emsp;
香港中文大学的Di Lin提出了一个基于Scribble标记的弱监督学习方法。Scribble是一个很方便使用的标记方法因此被用得比较广泛。如下图只需要画五条线就能完成对一副图像的标记工作。
![](./img/ch9/figure_9.9_1.png)
![](img/ch9/figure_9.9_1.png)
&emsp;&emsp;
ScribbleSup分为两步第一步将像素的类别信息从scribbles传播到其他未标记的像素自动完成所有的训练图像的标记工作 第二步使用这些标记图像训练CNN。在第一步中该方法先生成super-pxels, 然后基于graph cut的方法对所有的super-pixel进行标记。
![](./img/ch9/figure_9.9_2.png)
![](img/ch9/figure_9.9_2.png)
&emsp;&emsp;
Graph Cut的能量函数为
@ -661,7 +661,7 @@ $$
&emsp;&emsp;
上式的最优化是通过交替求 $Y$ 和 $\theta$ 的最优值来实现的。文章中发现通过三次迭代就能得到比较好的结果。
![](./img/ch9/figure_9.9_3.png)
![](img/ch9/figure_9.9_3.png)
### 9.10.2 图像级别标记
@ -670,7 +670,7 @@ $$
&emsp;&emsp;
UC Berkeley的Deepak Pathak使用了一个具有图像级别标记的训练数据来做弱监督学习。训练数据中只给出图像中包含某种物体但是没有其位置信息和所包含的像素信息。该文章的方法将image tags转化为对CNN输出的label分布的限制条件因此称为 Constrained convolutional neural network (CCNN).
![](./img/ch9/figure_9.9_4.png)
![](img/ch9/figure_9.9_4.png)
&emsp;&emsp;
该方法把训练过程看作是有线性限制条件的最优化过程:
@ -683,7 +683,7 @@ $$
其中的线性限制条件来自于训练数据上的标记例如一幅图像中前景类别像素个数期望值的上界或者下界物体大小、某个类别的像素个数在某图像中为0或者至少为1等。该目标函数可以转化为为一个loss function然后通过SGD进行训练。
![](./img/ch9/figure_9.9_5.png)
![](img/ch9/figure_9.9_5.png)
&emsp;&emsp;
实验中发现单纯使用Image tags作为限制条件得到的分割结果还比较差在PASCAL VOC 2012 test数据集上得到的mIoU为35.6%加上物体大小的限制条件后能达到45.1%如果再使用bounding box做限制可以达到54%。FCN-8s可以达到62.2%,可见弱监督学习要取得好的结果还是比较难。
@ -694,7 +694,7 @@ $$
&emsp;&emsp;
Google的George Papandreou 和UCLA的Liang-Chieh Chen等在DeepLab的基础上进一步研究了使用bounding box和image-level labels作为标记的训练数据。使用了期望值最大化算法EM来估计未标记的像素的类别和CNN的参数。
![](./img/ch9/figure_9.9_6.png)
![](img/ch9/figure_9.9_6.png)
&emsp;&emsp;
对于image-level标记的数据我们可以观测到图像的像素值和图像级别的标记 ,但是不知道每个像素的标号,因此把$y$当做隐变量。使用如下的概率图模式:
$$
@ -703,7 +703,7 @@ $$
&emsp;&emsp;
这篇论文是通过EM算法来学习模型的参数$\theta$,具体推导过程可参考原论文。
![](./img/ch9/figure_9.9_7.png)
![](img/ch9/figure_9.9_7.png)
&emsp;&emsp;
对于给出bounding box标记的训练图像该方法先使用CRF对该训练图像做自动分割然后在分割的基础上做全监督学习。通过实验发现单纯使用图像级别的标记得到的分割效果较差但是使用bounding box的训练数据可以得到较好的结果在VOC2012 test数据集上得到mIoU 62.2%。另外如果使用少量的全标记图像和大量的弱标记图像进行结合,可以得到与全监督学习(70.3%)接近的分割结果(69.0%)。
@ -721,7 +721,7 @@ $$
&emsp;&emsp;
在这个目标函数的基础上,根据不同的弱标记方式,可以给出不同的限制条件,因此该方法就是在相应的限制条件下求最大间隔聚类。
![](./img/ch9/figure_9.9_8.png)
![](img/ch9/figure_9.9_8.png)
&emsp;&emsp;
该方法在Siftflow数据集上得到了比较好的结果比state-of-the-art的结果提高了10%以上。
@ -735,14 +735,14 @@ $$
1. Learning to Segment via Cut-and-PasteECCV 2018
利用GAN对抗学习的思想在cut-paste思想指导下利用bbox弱监督进行实例分割。
![](./img/ch9/9.10.5-1.png)
![](img/ch9/9.10.5-1.png)
采用对抗学习的思想网络主体分为两大部分mask生成器和合成图像判别器。具体过程为1在图像上截取gt经过特征提取后预测一个bbox内gt的mask2在原图上随机cut一个背景图像将bbox内按照生成的mask提取出物体分割结果然后paste到原图裁剪的背景上去3合成的图像经过判别器进行真假判断。
通过生成器生成更好mask来使得判别器更难判别在对抗学习中提升两者的性能逐渐获得更好的结果 .
2. Simple Does It: Weakly Supervised Instance and Semantic SegmentationCVPR2017
本文做的是bbox弱监督语义/实例分割任务,能达到全监督分割效果(DeepLabv1)的95%。主要工作为讨论了使用弱监督语义标签进行迭代训练的方法以及其限制和不足之处证明了通过类似GrabCut的算法能通过bbox生成分割训练标签方法的可行性可以避免像上面的迭代方法重新调整网络训练策略在VOC数据集上逼近监督学习的分割任务效果。
作者的启发是将bbox level的mask送入网络训练后得到分割mask的比输入的bbox mask要好这是很好的insight。因此启发的操作是将bbox level标注作为初始mask输入优化每次得到的标注作为gt进行下一轮的迭代从而不断获得更好的效果。效果图如下
![](./img/ch9/9.10.5-3.png)
![](img/ch9/9.10.5-3.png)
在此基础上再加上优化的GrabCut+算法以及部分区域的筛选以及BSDS500的边界预测信息整合到一起能够达到很好的弱监督迭代分割效果。
@ -752,18 +752,18 @@ $$
* **分类监督**
1. Weakly Supervised Learning of Instance Segmentation with Inter-pixel Relations(CVPR2019)
使用分类标注作为弱监督信息在CAM提取到特征的基础上进一步设计IRNet学习额外的特征约束从而到达更好的弱监督实例分割效果。为了解决CAM应用到实例分割的上述局限设计IRNet。其组成为两部分1不分类别的实例响应图 2pairwise semantic affinitie。其中通过不分类别的实例响应图和CAM结合约束后得到instance-wise CAMS另一个分支预先预测物体的边界然后得到pairwise semantic affinitie关于这个的论文参考Related Work的对应部分有相应的方法暂时不深究进行融合和处理得到最终的分割。整体流程如下
![](./img/ch9/9.10.5-2.png)
![](img/ch9/9.10.5-2.png)
2. Weakly Supervised Instance Segmentation using Class Peak ResponseCVPR2018
本文使用图像级的类别标注监督信息通过探索类别响应峰值使分类网络能够很好地提取实例分割mask。本工作是使用图像级标注进行弱监督实例分割的首个工作。
在分类监督信息之下CNN网络会产生一个类别响应图每个位置是类别置信度分数。其局部极大值往往具有实例很强视觉语义线索。首先将类别峰值响应图的信息进行整合然后反向传播将其映射到物体实例信息量较大的区域如边界。上述从类别极值响应图产生的映射图称为Peak Response Maps (PRMs),该图提供了实例物体的详细表征,可以很好地用作分割监督信息。
具体流程如图:
![](./img/ch9/9.10.5-4.png)
![](img/ch9/9.10.5-4.png)
首先将图片经过正常的分类网络训练其中在类别预测响应图上提取出局部响应极值点进行增强卷积后预测出PRM。然后结合多种信息进行推断生成mask。
3. Weakly Supervised Semantic Segmentation Using Superpixel Pooling NetworkAAAI 2017
本文介绍通过类别标注的标签实现弱监督语义分割的方法。该方法在语义分割mask生成和使用生成mask学习分割生成网络之间反复交替。要实现这种交替迭代学习关键点就是如何利用类别标注得到较准确的初始分割。为了解决这一问题,提出了Superpixel Pooling Network (SPN),将输入图像的超像素分割结果作为低阶结构的表征,辅助语义分割的推断。
![](./img/ch9/9.10.5-5.png)
![](img/ch9/9.10.5-5.png)
首先是SPN生成初始mask然后用另一个网络DecoupledNet来学习每个像素的mask标注。其中该分割网络将语义分割任务解耦为分类和分割两个子任务并且能够从类别标注中学习形状先验知识用于辅助分割。
## 9.11 DenseNet贡献者黄钦建华南理工大学
@ -774,13 +774,13 @@ $$
&emsp;&emsp;
卷积神经网络结构的设计主要朝着两个方向发展一个是更宽的网络代表GoogleNet、VGG一个是更深的网络代表ResNet。但是随着层数的加深会出现一个问题——梯度消失这将会导致网络停止训练。到目前为止解决这个问题的思路基本都是在前后层之间加一个identity connections(short path)。
![](./img/ch9/9-10-3.png)
![](img/ch9/9-10-3.png)
&emsp;&emsp;
由上图中可知Resnet是做值的相加也就是add操作通道数是不变的。而DenseNet是做通道的合并也就是Concatenation操作就像Inception那样。从这两个公式就可以看出这两个网络的本质不同。此外DensetNet的前面一层输出也是后面所有层的输入这也不同于ResNet残差网络。
![](./img/ch9/9-10-1.png)
![](img/ch9/9-10-1.png)
&emsp;&emsp;
DenseNet的Block结构如上图所示。
@ -788,7 +788,7 @@ DenseNet的Block结构如上图所示。
&emsp;&emsp;
1*1卷积核的目的减少输入的特征图数量这样既能降维减少计算量又能融合各个通道的特征。我们将使用BottleNeck Layers的DenseNet表示为DenseNet-B。(在论文的实验里将1×1×n小卷积里的n设置为4kk为每个H产生的特征图数量)
![](./img/ch9/9-10-2.png)
![](img/ch9/9-10-2.png)
&emsp;&emsp;
上图是DenseNet网络的整体网络结构示意图。其中1*1卷积核的目的是进一步压缩参数并且在Transition Layer层有个参数Reduction范围是0到1表示将这些输出缩小到原来的多少倍默认是0.5这样传给下一个Dense Block的时候channel数量就会减少一半。当Reduction的值小于1的时候我们就把带有这种层的网络称为DenseNet-C。
@ -813,19 +813,19 @@ VOC 数据集分为20类包括背景为21类分别如下
VOC 数据集中用于分割比赛的图片实例如下包含原图以及图像分类分割和图像物体分割两种图PNG格式。图像分类分割是在20种物体中ground-turth图片上每个物体的轮廓填充都有一个特定的颜色一共20种颜色。
![](./img/ch9/VOC-01.png)
![](img/ch9/VOC-01.png)
### 9.12.2 MS COCO
MS COCO 是最大图像分割数据集,提供的类别有 80 类,有超过 33 万张图片,其中 20 万张有标注,整个数据集中个体的数目超过 150 万个。MS COCO是目前难度最大挑战最高的图像分割数据集。
![](./img/ch9/COCO-01.png)
![](img/ch9/COCO-01.png)
### 9.12.3 Cityscapes
Cityscapes 是驾驶领域进行效果和性能测试的图像分割数据集它包含了5000张精细标注的图像和20000张粗略标注的图像这些图像包含50个城市的不同场景、不同背景、不同街景以及30类涵盖地面、建筑、交通标志、自然、天空、人和车辆等的物体标注。Cityscapes评测集有两项任务像素级Pixel-level图像场景分割以下简称语义分割与实例级Instance-level图像场景分割以下简称实例分割
![](./img/ch9/Cityscapes-01.png)
![](img/ch9/Cityscapes-01.png)
## 9.13 全景分割(贡献者:北京理工大学--明奇)
全景分割的开山之作:何恺明的*Panoptic Segmentation*
@ -836,7 +836,7 @@ Cityscapes 是驾驶领域进行效果和性能测试的图像分割数据集,
&emsp;&emsp;全景分割的思路很直观为图像的每个像素分配语义label和类内实例id前者用于区分语义信息后者用于分割实例因此stuff不具有实例id。提出全景分割时只是启发式地将语意分割和实例分割两种任务的输出进行后处理的融合如NMS并以此建立PS任务的baseline。为了评价全景分割的质量提出panoptic quality (PQ) 标准,将背景和物体的评价纳入一个完整的框架下。示意图如下:
![](./img/ch9/9.13-1.png)
![](img/ch9/9.13-1.png)
2. **Panoptic Segmentation**
* **Task format**
@ -861,17 +861,17 @@ Cityscapes 是驾驶领域进行效果和性能测试的图像分割数据集,
3.2 **PQ Computation**
&emsp;&emsp;PQ的计算类似mAP也是类内求取然后求类间的平均值以便不敏感类别不平衡。对于每一类可以根据gt与预测的segmentation分为三类下图描述
![](./img/ch9/9.13-2.png)
![](img/ch9/9.13-2.png)
TP: 预测为正实际为正描述match较好的
FP: 预测为正实际为负描述match错的
FN: 预测为负实际为正描述没match出来的gt
&emsp;&emsp;通过上述三类可以计算得到PQ值公式
![](./img/ch9/9.13-3.png)
![](img/ch9/9.13-3.png)
式中出去FP与FN后剩下的式子描述的是match的segmentation的平均IoU加上FP与FN是为了惩罚match失败的分割实例。
有意思的是,对上述式子进行简单的恒等变化:
![](./img/ch9/9.13-4.png)
![](img/ch9/9.13-4.png)
第一项评价的是match分割的质量第二项类似于F1得分。因此可以PQ分解为
$$PQ=SQ*RQ$$
@ -897,7 +897,7 @@ gt中可能出现两种像素标注为空的情况超出类别的像素和模
PQ的度量可以分解成SQ和RQSQ反映了语义分割的像素级IoU性能RQ专注于检测识别的效果因此将两者统一到一个框架下。
分割效果:
![](./img/ch9/9.13-5.png)
![](img/ch9/9.13-5.png)
<br>
<br>

View File

@ -19,7 +19,7 @@ https://morvanzhou.github.io/tutorials/machine-learning/reinforcement-learning/
小孩想要走路,但在这之前,他需要先站起来,站起来之后还要保持平衡,接下来还要先迈出一条腿,是左腿还是右腿,迈出一步后还要迈出下一步。
小孩就是 agent他试图通过采取行动即行走来操纵环境行走的表面并且从一个状态转变到另一个状态即他走的每一步当他完成任务的子任务即走了几步孩子得到奖励给巧克力吃并且当他不能走路时就不会给巧克力。
![](./img/ch10/10-1.png)
![](img/ch10/10-1.png)
上图中agent代表自身如果是自动驾驶agent就是车如果你玩游戏它就是你当前控制的游戏角色如马里奥马里奥往前走时环境就一直在发生变化有小怪物或者障碍物出现它需要通过跳跃来进行躲避就是要做action如向前走和跳起的动作无人驾驶的action就是车左转、右转或刹车等等它无时无刻都在与环境产生交互action会反馈给环境进而改变环境如果自动驾驶的车行驶目标是100米它向前开了10米那环境就发生了变化所以每次产生action都会导致环境改变环境的改变会反馈给自身agent就是这样的一个循环反馈又两种方式1、做的好reward即正反馈2、做得不好punishment惩罚即负反馈。Agent可能做得好也可能做的不好环境始终都会给它反馈agent会尽量去做对自身有利的决策通过反反复复这样的一个循环agent会越来越做的好就像孩子在成长过程中会逐渐明辨是非这就是强化学习。
@ -28,7 +28,7 @@ https://morvanzhou.github.io/tutorials/machine-learning/reinforcement-learning/
例如一家日本公司 Fanuc工厂机器人在拿起一个物体时会捕捉这个过程的视频记住它每次操作的行动操作成功还是失败了积累经验下一次可以更快更准地采取行动。
![](./img/ch10/10-2.png)
![](img/ch10/10-2.png)
2Inventory Management
@ -64,7 +64,7 @@ https://morvanzhou.github.io/tutorials/machine-learning/reinforcement-learning/
在机器学习中,我们比较熟知的是监督式学习,非监督学习,此外还有一个大类就是强化学习:
当前的机器学习算法可以分为3种有监督的学习Supervised Learning、无监督的学习Unsupervised Learning和强化学习Reinforcement Learning结构图如下所示
![](./img/ch10/10-3.png)
![](img/ch10/10-3.png)
### 10.3.1 强化学习和监督式学习的区别:
@ -102,7 +102,7 @@ exploitation 会尝试过去经验中最有效的行为。
## 10.4 强化学习主要有哪些算法?
强化学习不需要监督信号,可以在模型未知的环境中平衡探索和利用, 其主要算法有蒙特卡罗强化学习, 时间差分(temporal difference: TD)学习, 策略梯度等。典型的深度强化学习算法特点及性能比较如下图所示:
![](./img/ch10/10-4.png)
![](img/ch10/10-4.png)
除了上述深度强化学习算法,还有深度迁移强化学习、分层深度强化学习、深度记忆强化学习以及多智能体强化学习等算法。
## 10.5 深度迁移强化学习算法

View File

@ -44,9 +44,9 @@
- **基于模型的迁移 (Parameter based TL)**:利用源域和目标域的参数共享模型
- **基于关系的迁移 (Relation based TL)**:利用源域中的逻辑网络关系进行迁移
![1542972502781](./img/ch11/1542972502781.png)
![1542972502781](img/ch11/1542972502781.png)
![1542974131814](./img/ch11/1542974131814.png)
![1542974131814](img/ch11/1542974131814.png)
### 11.1.5 迁移学习与传统机器学习有什么区别?
@ -56,7 +56,7 @@
| 数据标签 | 不需要足够的数据标注 | 足够的数据标注 |
| 建模 | 可以重用之前的模型 | 每个任务分别建模 |
![1542973960796](./img/ch11/1542973960796.png)
![1542973960796](img/ch11/1542973960796.png)
### 11.1.6 迁移学习的核心及度量准则?
**迁移学习的总体思路可以概括为**:开发算法来最大限度地利用有标注的领域的知识,来辅助目标领域的知识获取和学习。
@ -124,7 +124,7 @@ Reference
基于样本的迁移学习方法 (Instance based Transfer Learning) 根据一定的权重生成规则,对数据样本进行重用,来进行迁移学习。图[14](#bookmark90)形象地表示了基于样本迁移方法的思想源域中存在不同种类的动物,如狗、鸟、猫等,目标域只有狗这一种类别。在迁移时,为了最大限度地和目标域相似,我们可以人为地提高源域中属于狗这个类别的样本权重。
![](./media/631e5aab4e0680c374793804817bfbb6.jpg)
![](media/631e5aab4e0680c374793804817bfbb6.jpg)
<center>图 14: 基于样本的迁移学习方法示意图
@ -136,7 +136,7 @@ Reference
基于特征的迁移方法 (Feature based Transfer Learning) 是指将通过特征变换的方式互相迁移 [[Liu et al., 2011](#bookmark272), [Zheng et al.,2008](#bookmark327), [Hu and Yang, 2011](#bookmark263)],来减少源域和目标域之间的差距;或者将源域和目标域的数据特征变换到统一特征空间中 [[Pan et al.,2011](#bookmark288), [Long et al., 2014b](#bookmark278), [Duan et al.,2012](#bookmark248)],然后利用传统的机器学习方法进行分类识别。根据特征的同构和异构性,又可以分为同构和异构迁移学习。图[15](#bookmark93)很形象地表示了两种基于特 征的迁移学习方法。
![](./media/fa08900e89bfd53cc28345d21bc6aca0.jpg)
![](media/fa08900e89bfd53cc28345d21bc6aca0.jpg)
<center>图 15: 基于特征的迁移学习方法示意图
@ -146,7 +146,7 @@ Reference
基于模型的迁移方法 (Parameter/Model based Transfer Learning) 是指从源域和目标域中找到他们之间共享的参数信息,以实现迁移的方法。这种迁移方式要求的假设条件是: 源域中的数据与目标域中的数据可以共享一些模型的参数。其中的代表性工作主要有[[Zhao et al., 2010](#bookmark324), [Zhao et al., 2011](#bookmark325), [Panet al., 2008b](#bookmark287), [Pan et al., 2008a](#bookmark286)]。图[16](#bookmark96)形象地 表示了基于模型的迁移学习方法的基本思想。
![](./media/602723a1d3ce0f3abe7c591a8e4bb6ec.jpg)
![](media/602723a1d3ce0f3abe7c591a8e4bb6ec.jpg)
<center>图 16: 基于模型的迁移学习方法示意图
@ -160,11 +160,11 @@ Reference
我们将重点讨论基于特征和基于模型的迁移学习方法,这也是目前绝大多数研究工作的热点。
![](./media/aa10d36f758430dd4ff72d2bf6a76a6c.jpg)
![](media/aa10d36f758430dd4ff72d2bf6a76a6c.jpg)
<center>图 17: 基于关系的迁移学习方法示意图
![1542812440636](./media/1542812440636.png)
![1542812440636](media/1542812440636.png)
<center>图 18: 基于马尔科夫逻辑网的关系迁移
@ -177,7 +177,7 @@ Reference
图 [19](#bookmark84)形象地表示了几种数据分布的情况。简单来说,数据的边缘分布不同,就是数据整体不相似。数据的条件分布不同,就是数据整体相似,但是具体到每个类里,都不太相似。
![1542812748062](./media/1542812748062.png)
![1542812748062](media/1542812748062.png)
<center>图 19: 不同数据分布的目标域数据
@ -203,7 +203,7 @@ Reference
STL 方法的基本思路如图所示。首先利用大多数投票的思想,对无标定的位置行为生成伪标;然后在再生核希尔伯特空间中,利用类内相关性进行自适应地空间降维,使得不同情境中的行为数据之间的相关性增大;最后,通过二次标定,实现对未知标定数据的精准标定。
![1542817481582](./media/1542817481582.png)
![1542817481582](media/1542817481582.png)
<center>图 21: STL 方法的示意图
### 11.3.4 联合分布自适应
@ -222,7 +222,7 @@ Reference
1. 精度比较: BDA \>JDA \>TCA \>条件分布自适应。
2. 将不同的概率分布自适应方法用于神经网络,是一个发展趋势。图[23](#bookmark119)展示的结果表明将概率分布适配加入深度网络中,往往会取得比非深度方法更好的结果。
![1542823019007](./media/1542823019007.png)
![1542823019007](media/1542823019007.png)
<center>图 22: BDA 方法的效果第二类方法:特征选择
### 11.3.6 特征选择
@ -231,17 +231,17 @@ Reference
图 [24](#bookmark122)形象地表示了特征选择法的主要思路。
![1542823210556](./media/1542823210556.png)
![1542823210556](media/1542823210556.png)
<center>图 23: 不同分布自适应方法的精度比较
![](./media/a3db84158d9b6454adff88dbe4fa5d28.jpg)
![](media/a3db84158d9b6454adff88dbe4fa5d28.jpg)
<center>图 24: 特征选择法示意图
这这个领域比较经典的一个方法是发表在 2006 年的 ECML-PKDD 会议上,作者提出了一个叫做 SCL 的方法 (Structural Correspondence Learning) [[Blitzer et al.,2006](#bookmark235)]。这个方法的目标就是我们说的,找到两个领域公共的那些特征。作者将这些公共的特征叫做Pivot feature。找出来这些Pivot feature,就完成了迁移学习的任务。
![](./media/4abacd82901988c3e0a98bdb07b2abc6.jpg)
![](media/4abacd82901988c3e0a98bdb07b2abc6.jpg)
<center>图 25: 特征选择法中的 Pivot feature 示意图
@ -255,15 +255,15 @@ Reference
统计特征对齐方法主要将数据的统计特征进行变换对齐。对齐后的数据可以利用传统机器学习方法构建分类器进行学习。SA方法(Subspace Alignment子空间对齐)[[Fernando et al.,2013](#bookmark249)]是其中的代表性成果。SA方法直接寻求一个线性变换**M**将不同的数据实现变换对齐。SA方法的优化目标如下
![1542823438846](./media/1542823438846.png)
![1542823438846](media/1542823438846.png)
则变换 **M** 的值为:
![1542823455820](./media/1542823455820.png)
![1542823455820](media/1542823455820.png)
可以直接获得上述优化问题的闭式解:
![1542823474720](./media/1542823474720.png)
![1542823474720](media/1542823474720.png)
SA 方法实现简单,计算过程高效,是子空间学习的代表性方法。
@ -275,7 +275,7 @@ Reference
流形空间中的距离度量:两点之间什么最短?在二维上是直线(线段),可在三维呢?地球上的两个点的最短距离可不是直线,它是把地球展开成二维平面后画的那条直线。那条线在三维的地球上就是一条曲线。这条曲线就表示了两个点之间的最短距离,我们叫它测地线。更通俗一点, 两点之间,测地线最短。在流形学习中,我们遇到测量距离的时候更多的时候用的就是这个测地线。在我们要介绍的 GFK 方法中,也是利用了这个测地线距离。比如在下面的图中,从 A 到 C 最短的距离在就是展开后的线段,但是在三维球体上看它却是一条曲线。
![](./media/fcbe02803e45f6455a4602b645b472c5.jpg)
![](media/fcbe02803e45f6455a4602b645b472c5.jpg)
<center>图 28: 三维空间中两点之间的距离示意图
@ -289,7 +289,7 @@ al., 2012](#bookmark255)]是最为代表性的一个。GFK是在2011年发表在
于是 SGF 就做了这个事情。它是怎么做的呢?把源域和目标域分别看成高维空间 (即Grassmann流形)中的两个点在这两个点的测地线距离上取d个中间点然后依次连接起来。这样源域和目标域就构成了一条测地线的路径。我们只需要找到合适的每一步的变换就能从源域变换到目标域了。图 [29](#bookmark133)是 SGF 方法的示意图。
![](./media/103de3658cbb97ad4c24bafe28f9d957.jpg)
![](media/103de3658cbb97ad4c24bafe28f9d957.jpg)
<center>图 29: SGF 流形迁移学习方法示意图
@ -297,7 +297,7 @@ al., 2012](#bookmark255)]是最为代表性的一个。GFK是在2011年发表在
GFK方法首先解决SGF的问题如何确定中间点的个数d。它通过提出一种核学习的方法利用路径上的无穷个点的积分把这个问题解决了。这是第一个贡献。然后它又解决了第二个问题当有多个源域的时候我们如何决定使用哪个源域跟目标域进行迁移 GFK通过提出Rank of Domain度量度量出跟目标域最近的源域来解决这个问题。图 [30](#bookmark134)是 GFK 方法的示意图。
![](./media/e654d14df0b44ee4e8a0e505c654044b.jpg)
![](media/e654d14df0b44ee4e8a0e505c654044b.jpg)
<center>图 30: GFK 流形迁移学习方法示意图
@ -305,7 +305,7 @@ al., 2012](#bookmark255)]是最为代表性的一个。GFK是在2011年发表在
特别地,流形空间中的特征可以被表示为**z** =\$(t)T**x**。变换后的特征**Z**i和**Z**j的内积定义了一个半正定 (positive semidefinite) 的测地线流式核
![1542823895008](./media/1542823895008.png)
![1542823895008](media/1542823895008.png)
GFK 方法详细的计算过程可以参考原始的文章,我们在这里不再赘述。
@ -327,7 +327,7 @@ al., 2012](#bookmark255)]是最为代表性的一个。GFK是在2011年发表在
图[36](#bookmark148)展示了一个简单的finetune过程。从图中我们可以看到我们采用的预训练好的网络非常复杂,如果直接拿来从头开始训练,则时间成本会非常高昂。我们可以将此网络进行改造,固定前面若干层的参数,只针对我们的任务,微调后面若干层。这样,网络训练速度会极大地加快,而且对提高我们任务的表现也具有很大的促进作用。
![](./media/b1630ca5d004d4b430672c8b8ce7fb90.jpg)
![](media/b1630ca5d004d4b430672c8b8ce7fb90.jpg)
<center>图 36: 一个简单的 finetune 示意图
**Finetune 的优势**
@ -350,7 +350,7 @@ al., 2012](#bookmark255)]是最为代表性的一个。GFK是在2011年发表在
随着 AlexNet [[Krizhevsky et al., 2012](#bookmark268)] 在 2012 年的 ImageNet大赛上获得冠军深度学习开始在机器学习的研究和应用领域大放异彩。尽管取得了很好的结果但是神经网络本身就像一个黑箱子看得见摸不着解释性不好。由于神经网络具有良好的层次结构很自然地就有人开始关注能否通过这些层次结构来很好地解释网络于是有了我们熟知的例子假设一个网络要识别一只猫那么一开始它只能检测到一些边边角角的东西和猫根本没有关系然后可能会检测到一些线条和圆形慢慢地可以检测到有猫的区域接着是猫腿、猫脸等等。图 [32](#bookmark137)是一个简单的示例。
![1542824195602](./media/1542824195602.png)
![1542824195602](media/1542824195602.png)
<center>图 32: 深度神经网络进行特征提取到分类的简单示例
@ -377,7 +377,7 @@ al., 2012](#bookmark255)]是最为代表性的一个。GFK是在2011年发表在
这个图说明了什么呢我们先看蓝色的BnB和BnB+就是BnB加上finetune。对 BnB而言原训练好的 B 模型的前 3 层直接拿来就可以用而不会对模型精度有什么损失到了第4 和第5 层精度略有下降不过还是可以接受。然而到了第6 第第7层精度居然奇迹般地回升了这是为什么原因如下:对于一开始精度下降的第4 第 5 层来说,确
![1542824318155](./media/1542824318155.png)
![1542824318155](media/1542824318155.png)
<center>图 33: 深度网络迁移实验结果 1
@ -417,7 +417,7 @@ al., 2012](#bookmark255)]是最为代表性的一个。GFK是在2011年发表在
深度网络中最重要的是网络损失的定义。绝大多数深度迁移学习方法都采用了以下的损失定义方式:
![1542824918145](./media/1542824918145.png)
![1542824918145](media/1542824918145.png)
其中I表示网络的最终损失lc(Ds,**y**s)表示网络在有标注的数据(大部分是源域)上的常规分类损失(这与普通的深度网络完全一致)Ia(Ds,Dt)表示网络的自适应损失。最后一部分是传统的深度网络所不具有的、迁移学习所独有的。此部分的表达与我们先前讨论过的源域和目标域的分布差异在道理上是相同的。式中的A是权衡两部分的权重参数。
@ -436,17 +436,17 @@ al., 2012](#bookmark255)]是最为代表性的一个。GFK是在2011年发表在
通常用 Gf 来表示特征提取器,用 Gd 来表示判别器。正是基于这样的领域对抗的思想深度对抗网络可以被很好地运用于迁移学习问题中。与深度网络自适应迁移方法类似深度对抗网络的损失也由两部分构成网络训练的损失lc*和领域判别损失Id
![1542826334834](./media/1542826334834.png)
![1542826334834](media/1542826334834.png)
**DANN**
Yaroslav Ganin 等人 [[Ganin et al., 2016](#bookmark251)]首先在神经网络的训练中加入了对抗机制作者将他们的网络称之为DANN(Domain-Adversarial Neural Network)。在此研宄中,网络的学习目标是:生成的特征尽可能帮助区分两个领域的特征,同时使得判别器无法对两个领域的差异进行判别。该方法的领域对抗损失函数表示为:
![1542826461988](./media/1542826461988.png)
![1542826461988](media/1542826461988.png)
Id = max 其中的 Ld 表示为
![1542826475517](./media/1542826475517.png)
![1542826475517](media/1542826475517.png)

View File

@ -82,7 +82,7 @@ sess.close()
### &emsp;&emsp;整个系统从底层到上层可分为七层:
![](.\img\ch12\1.bmp)
![](img\ch12\1.bmp)
&emsp;&emsp;设备层硬件计算资源支持CPU、GPU
@ -566,10 +566,10 @@ AlexNet中用到了一些非常大的卷积核比如11×11、5×5卷积核
>> 提出了feature recalibration通过引入 attention 重新加权,可以得到抑制无效特征,提升有效特征的权重,并很容易地和现有网络结合,提升现有网络性能,而计算量不会增加太多。
**CV领域网络结构演进历程**
![CV领域网络结构演进历程](./img/ch12/网络结构演进.png)
![CV领域网络结构演进历程](img/ch12/网络结构演进.png)
**ILSVRC挑战赛历年冠军:**
![ILSVRC挑战赛历年冠军](./img/ch12/历年冠军.png)
![ILSVRC挑战赛历年冠军](img/ch12/历年冠军.png)
此后ILSVRC挑战赛的名次一直是衡量一个研究机构或企业技术水平的重要标尺。

View File

@ -256,7 +256,7 @@ Loss = \lVert g(x)-f(x) \rVert^2_2.
$$
假设损失函数的数据空间是下图这样的,我们最优的权值就是为了寻找下图中的最小值点, 对于这种数学寻找最小值问题,采用梯度下降的方法再适合不过了。
![](./img/ch13/figure_13_15_1.png)
![](img/ch13/figure_13_15_1.png)
<center>图 13.8.1 </center>
@ -272,7 +272,7 @@ $$
2激活函数
如果激活函数选择不合适,比如使用 sigmoid梯度消失就会很明显了原因看下图左图是sigmoid的函数图右边是其导数的图像如果使用sigmoid作为损失函数其梯度是不可能超过0.25的,这样经过链式求导之后,很容易发生梯度消失。
![](./img/ch13/figure_13_15_2.png)
![](img/ch13/figure_13_15_2.png)
<center>图 13.8.2 sigmod函数与其导数</center>

View File

@ -2,7 +2,7 @@
# 第十四章 超参数调整
# 第十四章 超参数调整
> Markdown Revision 1;
> Date: 2018/10/25
@ -15,7 +15,7 @@
超参数调整可以说是深度学习中理论和实际联系最重要的一个环节。目前,深度学习仍存在很多不可解释的部分,如何设计优化出好的网络可以为深度学习理论的探索提供重要的支持。超参数调整一般分为手动调整和自动优化超参数两种。读者可先浏览思维导图,本章节不会过多阐述所有超参数的详细原理,如果需要了解这部分,您可以翻阅前面的基础章节或者查阅相关文献资料。当然,下面会讲到的一些超参数优化的建议是根据笔者们的实践以及部分文献资料得到认知建议,并不是非常严格且一定有效的,很多研究者可能会很不同意某些的观点或有着不同的直觉,这都是可保留讨论的,因为这很依赖于数据本身情况。
![](.\img\ch14\思维导图.png)
![](img\ch14\思维导图.png)
@ -108,7 +108,7 @@ natural_exp_decay(learning_rate, global_step, decay_steps, decay_rate,
指数衰减是最常用的衰减方式,这种方式简单直接,在训练初期衰减较大利于收敛,在后期衰减较小利于精调。以上两种均为指数衰减,区别在于后者使用以自然指数下降。
![./](.\img\ch14\指数衰减.jpeg)
![./](img\ch14\指数衰减.jpeg)
2、**piecewise_constant**
@ -138,11 +138,11 @@ $$
有别于上述两种多项式衰减则是在每一步迭代上都会调整学习率。主要看Power参数若Power为1则是下图中的红色直线若power小于1则是开1/power次方为蓝色线绿色线为指数power大于1。
![](.\img\ch14\多项式衰减.jpeg)
![](img\ch14\多项式衰减.jpeg)
此外需要注意的是参数cyclecycle对应的是一种周期循环调整的方式。这种cycle策略主要目的在后期防止在一个局部极小值震荡若跳出该区域或许能得到更有的结果。这里说明cycle的方式不止可以在多项式中应用可配合类似的周期函数进行衰减如下图。
![](.\img\ch14\cycle衰减.jpeg)
![](img\ch14\cycle衰减.jpeg)
4、**inverse_time_decay**
@ -151,7 +151,7 @@ inverse_time_decay(learning_rate, global_step, decay_steps, decay_rate,
staircase=False, name=None)
```
逆时衰减,这种方式和指数型类似。如图,![](.\img\ch14\逆时衰减.jpeg)
逆时衰减,这种方式和指数型类似。如图,![](img\ch14\逆时衰减.jpeg)
5、**cosine_decay**
@ -162,7 +162,7 @@ cosine_decay(learning_rate, global_step, decay_steps, alpha=0.0,
余弦衰减,即按余弦函数的方式衰减学习率,如图
![](.\img\ch14\余弦衰减.jpeg)
![](img\ch14\余弦衰减.jpeg)
6、**cosine_decay_restarts**
@ -173,7 +173,7 @@ cosine_decay_restarts(learning_rate, global_step, first_decay_steps,
余弦衰减即余弦版本的cycle策略作用与多项式衰减中的cycle相同。区别在于余弦重启衰减会重新回到初始学习率拉长周期而多项式版本则会逐周期衰减。
![](.\img\ch14\余弦cycle衰减.jpeg)
![](img\ch14\余弦cycle衰减.jpeg)
7、**linear_cosine_decay**
@ -185,13 +185,13 @@ linear_cosine_decay(learning_rate, global_step, decay_steps,
线性余弦衰减,主要应用于增强学习领域。
![](.\img\ch14\线性余弦衰减.jpeg)
![](img\ch14\线性余弦衰减.jpeg)
8、**noisy_linear_cosine_decay**
噪声线性余弦衰减,即在线性余弦衰减中加入随机噪声,增大寻优的随机性。
![](.\img\ch14\噪声线性余弦衰减.jpeg)
![](img\ch14\噪声线性余弦衰减.jpeg)
### 14.3.4 极端批样本数量下,如何训练网络?
@ -315,7 +315,7 @@ GAN常用训练技巧
随机搜索是一种用来替代网格搜索的搜索方式。随机搜索有别于网格搜索的一点在于我们不需要设定一个离散的超参数集合而是对每个超参数定义一个分布函数来生成随机超参数。随机搜索相比于网格搜索在一些不敏感超参上拥有明显优势。例如网格搜索对于批样本数量batch size在[16,32,64]这些范围内进行逐项调试,这样的调试显然收益更低下。当然随机搜索也可以进行细粒度范围内的重复的搜索优化。
![](.\img\ch14\14.14.png)
![](img\ch14\14.14.png)
基于模型的超参优化:
@ -345,13 +345,13 @@ NASNet是最早由google brain 通过网络架构搜索策略搜索并成功训
NASNet的核心思想是利用强化学习对搜索空间内的结构进行反馈探索。架构搜索图如下定义了一个以RNN为核心的搜索控制器。在搜索空间以概率p对模型进行搜索采样。得到网络模型A后对该模型进行训练待模型收敛得到设定的准确率R后将梯度传递给控制器RNN进行梯度更新。
![](.\img\ch14\NAS搜索策略.png)
![](img\ch14\NAS搜索策略.png)
架构搜索策略流程
RNN控制器会对卷积层的滤波器的尺寸、数量以及滑动间隔进行预测。每次预测的结果都会作为下一级的输入档层数达到设定的阈值时会停止预测。而这个阈值也会随着训练的进行而增加。这里的控制器之预测了卷积并没有对例如inception系列的分支结构或者ResNet的跳级结构等进行搜索。所以控制器需要进一步扩展到预测这些跳级结构上这样搜索空间相应的也会增大。为了预测这些结构RNN控制器内每一层都增加了一个预测跳级结构的神经元文中称为锚点稍有不同的是该锚点的预测会由前面所有层的锚点状态决定。
![](.\img\ch14\RNN控制器.png)
![](img\ch14\RNN控制器.png)
RNN控制器
@ -359,7 +359,7 @@ NASNet大体沿用了上述生成网络结构的机器并在此基础上做
1、先验行地加入inception系列和ResNet的堆叠模块的思想。其定义了两种卷积模块Normal Cell和Reduction Cell前者不进行降采样而后者是个降采样的模块。而由这两种模块组成的结构可以很方便的通过不同数量的模块堆叠将其从小数据集搜索到的架构迁移到大数据集上大大提高了搜索效率。
![](.\img\ch14\NASNet的RNN控制器.png)
![](img\ch14\NASNet的RNN控制器.png)
NASNet的RNN控制器

View File

@ -22,24 +22,24 @@ GPU图形显示芯片作为不同于CPU的设计逻辑和应用场景
首先下图简单地展示了几个GPU不同于CPU的特性
* 计算核心: 图中的CPU,i7-5960Intel的第五代Broadwell架构其中包括了8个CPU核心(支持16线程)也就是理论上可以有16个不同的运算同时进行。除了8个核心计算单元大部分的芯片面积是被3级缓存内存和控制电路占据了。同样的来自Nvidia的GTX980GPU在差不多的芯片面积上大部分是计算单元16个SM也就是流处理单元每个流处理单元中包含着128个CUDA计算核心所以总共来说有2048个GPU运算单元相应地这颗GPU理论上可以在一个时钟周期内可以进行2048次单精度运算。
![CPU和GPU的简单架构对比图](./img/ch15/cpu_gpu.png)
![CPU和GPU的简单架构对比图](img/ch15/cpu_gpu.png)
* 计算核心频率时钟频率代表每一秒中内能进行同步脉冲次数也是从一个侧面反映一个计算元件的工作速度。下图中对比了个别早期产品比如Intel的x5650和几款Nvidia的GPU。可以看出核心频率而言CPU要远高于GPU。对于CPU而言在不考虑能源消耗和制程工艺限制的情况下追求更高的主频。但在GPU的设计中采用了多核心设计即使是提高一些频率其实对于总体性能影像不会特别大。当然其中还有能耗方面的考虑避免发热过高也进行了权衡。还有一个可能的原因是在一个流处理器中的每个核心CUDA核心的运行共享非常有限的缓存和寄存器由于共享内存也是有性能极限的所以即使每个GPU核心频率提高如果被缓存等拖累也是无法展现出高性能的。
![CPU简单信息](./img/ch15/cpu_specs.png)
![CPU简单信息](img/ch15/cpu_specs.png)
![GPU的简单信息对比](./img/ch15/gpu_specs.png)
![GPU的简单信息对比](img/ch15/gpu_specs.png)
* 内存架构GPU的多层内存架构包括全局内存也就是通常意义上大部分比较关注的内存在若干到16GB之间截至到当前最新2级缓存和芯片上的存储包括寄存器和1级缓存共用的共享内存只读/纹理缓存和常量缓存)。通常来说,最高速的共享内存/缓存和寄存器都是非常有限的比如在Tesla的K20中只有48K的缓存可以作为共享内存或者1级缓存使用所以在很多用GPU加速算法实现的过程中有效地利用这些高速缓存是使得性能提升的非常重要的方面。
![GPU的简单信息对比](./img/ch15/gpu_memory_arch.png)
![GPU的简单信息对比](img/ch15/gpu_memory_arch.png)
![GPU的内存架构容量信息](./img/ch15/gpu_memory.png)
![GPU的内存架构容量信息](img/ch15/gpu_memory.png)
### 15.3.2 CUDA 核心是什么?
上面提到在一个GPU芯片里会很几千个CUDA核心被分布在多个流处理单元SM比如上面提到早期的GTX980中的16个SM中各包含了128个CUDA核心。如下图所示作为GPU架构中的最小单元其实它的设计和CPU有着非常类似的结构其中包括了一个浮点运算单元和整型运算单元和控制单元。同一个流处理器中所有的CUDA核心将同步执行同一个指令但是作用于不同的数据点上。
![CUDA简单介绍](./img/ch15/cudacore.jpg)
![CUDA简单介绍](img/ch15/cudacore.jpg)
一般来说更加多的CUDA核心意味着有更多的并行执行单元所以也就可以片面地认为是有更加高的性能。但是其实这个也是取决于很多方面最重要的是算法在并行实现的时候有没有高效地调度和内存的使用优化。在现在我们使用的大部分GPU加速的深度学习框架里包括TensorflowPyTorch等都是依赖于底层的GPU的矩阵加速代码的实现。为此Nvidia公司也是制定和实现了统一的接口比如cuDNN方便上层框架更好的利用GPU的性能。
@ -53,7 +53,7 @@ GPU整体的架构而言某种意义上是同时支持以上两种并行模
基于深度学习中大部分的操作的天然并行性大量的矩阵操作GPU在当下还是一种非常适合的计算平台。一个非常典型的例子就是常见的矩阵相乘如下图要计算Z = X×Y通过并行计算X和Y中的行向量和列向量的逐元素相乘就可以同时进行只要得到结果后再进行累加而且累加的过程中也是可以进行并行化使得效率有非常大的提高。Nvidia也是制定和开发了一套底层类库CUBlas方便开发者。我们熟悉的几大框架(e.g. Tensorflow, PyTorch等)也是遵循和使用了这些并行类库,所以才使得训练和部署性能有了非常多的提高。
![CUDA 矩阵乘法示例](./img/ch15/mat_mul_gpu.png)
![CUDA 矩阵乘法示例](img/ch15/mat_mul_gpu.png)
### 15.3.4 深度学习中的GPU应用
深度学习在最近几年内出现的井喷现象背后也是GPU的存在和发展作为坚实的推动力量。
@ -85,7 +85,7 @@ GPU的性能主要由以下三个参数构成
下图描绘了GTX 900和1000系列里各个型号的32位浮点计算能力和价格的对比。其中价格为Wikipedia的建议价格。
![浮点计算能力和价格的对比。](./img/ch15/gtx.png)
![浮点计算能力和价格的对比。](img/ch15/gtx.png)
我们可以从图中读出两点信息:
@ -148,9 +148,9 @@ Nvidia一般每一两年发布一次新版本的GPU例如2017年发布的是G
cuda8.0https://developer.nvidia.com/cuda-80-ga2-download-archive
cuda9.0https://developer.nvidia.com/cuda-90-download-archive
进入网址之后选择对应的系统版本即可,如下图所示:
![cuda8.0](./img/ch15/cuda8.0.png)
![cuda8.0](img/ch15/cuda8.0.png)
![cuda9.0](./img/ch15/cuda9.0.png)
![cuda9.0](img/ch15/cuda9.0.png)
2. 命令行中进入到cuda所在的位置授予运行权限
cuda8.0: sudo chmod +x cuda_8.0.61_375.26_linux.run

View File

@ -56,7 +56,7 @@
如果按剪枝粒度分,从粗到细,可分为中间隐含层剪枝、通道剪枝、卷积核剪枝、核内剪枝、单个权重剪枝。下面按照剪枝粒度的分类从粗(左)到细(右)。
![](./img/ch17/剪枝粒度分类.png)
![](img/ch17/剪枝粒度分类.png)
a层间剪枝 b特征图剪枝 ck*k核剪枝 d核内剪枝
@ -81,7 +81,7 @@
网络精馏是指利用大量未标记的迁移数据(transfer data),让小模型去拟合大模型,从而让小模型学到与大模型相似的函数映射.网络精馏可以看成在同一个域上迁移学习[34]的一种特例,目的是获得一个比原模型更为精简的网络,整体的框架图如图 4所示.
![](./img/ch17/网络蒸馏.png)
![](img/ch17/网络蒸馏.png)
### 17.4.5 前端压缩
@ -151,7 +151,7 @@ INT8量化TensorFlow-lite [20], TensorRT [21]
在2013年,Denil等人[57]从理论上利用低秩分解的技术并分析了深度神经网络存在大量的冗余信
息,开创了基于低秩分解的深度网络模型压缩与加速的新思路.如图7所示,展示了主流的张量分解后卷积 计 算.
![](.\img\ch17\低秩分解模型压缩加速.jpg)
![](img\ch17\低秩分解模型压缩加速.jpg)
(出自《深度神经网络压缩与加速综述》)
@ -215,11 +215,11 @@ https://blog.csdn.net/xh_hit/article/details/79769599
(3) 对于网络结构的水平组合水平组合是指将输入为相同张量和执行相同操作的层融合一起例如图2向图3的转化。
![](./img/ch17/tensorRT1.png)
![](img/ch17/tensorRT1.png)
![](./img/ch17/tensorRT2.png)
![](img/ch17/tensorRT2.png)
![](./img/ch17/tensorRT3.png)
![](img/ch17/tensorRT3.png)
以上3步即是TensorRT对于所部署的深度学习网络的优化和重构根据其优化和重构策略第一和第二步适用于所有的网络架构但是第三步则对于含有Inception结构的神经网络加速效果最为明显。
@ -283,14 +283,14 @@ https://blog.csdn.net/xh_hit/article/details/79769599
- 输出特征的维度为$H_1*W_1*C_2$ 。
传统卷积计算方式如下:
![image](./img/ch17/1.png)
![image](img/ch17/1.png)
传统卷积运算量为:
$$
A = H*W * h1 * w1 * c1 * c2
$$
Group convolution是将输入特征的维度c1分成g份每个group对应的channel数为c1/g特征维度H \* W \* c1/g每个group对应的卷积核的维度也相应发生改变为h1 \* w1 \* c1/9共c2/g个每个group相互独立运算最后将结果叠加在一起。
Group convolution计算方式如下
![image](./img/ch17/2.png)
![image](img/ch17/2.png)
Group convolution运算量为
$$
B = H * W * h1 * w1 * c1/g * c2/g * g
@ -307,19 +307,19 @@ depthwise conv(DW)有效减少参数数量并提升运算速度。但是由于
pointwise conv(PW)实现通道特征信息交流解决DW卷积导致“信息流通不畅”的问题。
假设输入特征的的维度为H \* W \* c1卷积核的维度为h1 \* w1 \* c1共c2个输出特征的维度为 H1 \* W1 \* c2。
传统卷积计算方式如下:
![image](./img/ch17/3.png)
![image](img/ch17/3.png)
传统卷积运算量为:
$$
A = H * W * h1 * w1 * c1 * c2
$$
DW卷积的计算方式如下
![image](./img/ch17/4.png)
![image](img/ch17/4.png)
DW卷积运算量为
$$
B_DW = H * W * h1 * w1 * 1 * c1
$$
PW卷积的计算方式如下
![image](./img/ch17/5.png)
![image](img/ch17/5.png)
$$
B_PW = H_m * W_m * 1 * 1 * c_1 * c_2
@ -376,16 +376,16 @@ $$
**模型中分支数量越少,模型速度越快**
此结论主要是由实验结果所得。
以下为网络分支数和各分支包含的卷积数目对神经网络速度的影响。
![image](./img/ch17/6.png)
![image](img/ch17/6.png)
实验中使用的基本网络结构分别将它们重复10次然后进行实验。实验结果如下
![image](./img/ch17/7.png)
![image](img/ch17/7.png)
由实验结果可知随着网络分支数量的增加神经网络的速度在降低。网络碎片化程度对GPU的影响效果明显对CPU不明显但是网络速度同样在降低。
### 17.8.7 减少元素级操作
**元素级操作所带来的时间消耗也不能忽视**
ReLU Tensor 相加Bias相加的操作分离卷积depthwise convolution都定义为元素级操作。
FLOPs大多数是对于卷积计算而言的因为元素级操作的FLOPs相对要低很多。但是过的元素级操作也会带来时间成本。ShuffleNet作者对ShuffleNet v1和MobileNet v2的几种层操作的时间消耗做了分析发现元素级操作对于网络速度的影响也很大。
![image](./img/ch17/8.png)
![image](img/ch17/8.png)
## 17.9 常用的轻量级网络有哪些?
### 17.9.1 SequeezeNet
@ -400,13 +400,13 @@ SqueenzeNet出自F. N. Iandola, S.Han等人发表的论文《SqueezeNet: AlexNet
* 分辨率越大的输入能够提供更多特征的信息,有利于网络的训练判断,延迟降采样可以提高网络精度。
#### 1.2 网络架构
SqueezeNet提出一种多分支结构——fire model其中是由Squeeze层和expand层构成。Squeeze层是由s1个1\*1卷积组成主要是通过1\*1的卷积降低expand层的输入维度expand层利用e1个1\*1和e3个3\*3卷积构成多分支结构提取输入特征以此提高网络的精度(其中e1=e3=4*s1)。
![image](./img/ch17/9.png)
![image](img/ch17/9.png)
SqueezeNet整体网络结构如下图所示
![image](./img/ch17/10.png)
![image](img/ch17/10.png)
#### 1.3实验结果
不同压缩方法在ImageNet上的对比实验结果
![image](./img/ch17/11.png)
![image](img/ch17/11.png)
由实验结果可知SqueezeNet不仅保证了精度而且将原始AlexNet从240M压缩至4.8M压缩50倍说明此轻量级网络设计是可行。
### 17.9.2 MobileNet
@ -421,17 +421,17 @@ MobileNet 是Google团队于CVPR-2017的论文《MobileNets: Efficient Convoluti
* DW conv和PW conv
MobileNet的网络架构主要是由DW conv和PW conv组成相比于传统卷积可以降低$\dfrac{1}{N} + \dfrac{1}{Dk}$倍的计算量。
标准卷积与DW conv和PW conv如图所示:
![image](./img/ch17/12.png)
![image](img/ch17/12.png)
深度可分离卷积与传统卷积运算量对比:
![image](./img/ch17/13.png)
![image](img/ch17/13.png)
网络结构:
![image](./img/ch17/14.png)
![image](img/ch17/14.png)
* MobileNets的架构
![image](./img/ch17/15.png)
![image](img/ch17/15.png)
#### 2.3 实验结果
![image](./img/ch17/16.png)
![image](img/ch17/16.png)
由上表可知使用相同的结构深度可分离卷积虽然准确率降低1%但是参数量减少了6/7。
### 17.9.3 MobileNet-v2
@ -447,15 +447,15 @@ MobileNet-V2是2018年1月公开在arXiv上论文《Inverted Residuals and Linea
* Inverted residuals
ResNet中Residuals block先经过1\*1的Conv layer把feature map的通道数降下来再经过3\*3 Conv layer最后经过一个1\*1 的Conv layer将feature map 通道数再“扩张”回去。即采用先压缩,后扩张的方式。而 inverted residuals采用先扩张后压缩的方式。
MobileNet采用DW conv提取特征由于DW conv本身提取的特征数就少再经过传统residuals block进行“压缩”此时提取的特征数会更少因此inverted residuals对其进行“扩张”保证网络可以提取更多的特征。
![image](./img/ch17/17.png)
![image](img/ch17/17.png)
* Linear bottlenecks
ReLu激活函数会破坏特征。ReLu对于负的输入输出全为0而本来DW conv特征通道已经被“压缩”再经过ReLu的话又会损失一部分特征。采用Linear目的是防止Relu破坏特征。
![image](./img/ch17/18.png)
![image](img/ch17/18.png)
* shortcut
stride=2的conv不使用shot-cotstride=1的conv使用shot-cut
![image](./img/ch17/19.png)
![image](img/ch17/19.png)
* 网络架构
![image](./img/ch17/20.png)
![image](img/ch17/20.png)
### 17.9.4 Xception
Xception是Google提出的arXiv 的V1 于2016年10月公开《Xception: Deep Learning with Depthwise Separable Convolutions 》Xception是对Inception v3的另一种改进主要是采用depthwise separable convolution来替换原来Inception v3中的卷积操作。
@ -467,7 +467,7 @@ Xception是Google提出的arXiv 的V1 于2016年10月公开《Xception: Deep
#### 4.2网络架构
feature map在空间和通道上具有一定的相关性通过Inception模块和非线性激活函数实现通道之间的解耦。增多3\*3的卷积的分支的数量使它与1\*1的卷积的输出通道数相等此时每个3\*3的卷积只作用与一个通道的特征图上作者称之为“极致的InceptionExtream Inception”模块这就是Xception的基本模块。
![image](./img/ch17/21.png)
![image](img/ch17/21.png)
### 17.9.5 ShuffleNet-v1
ShuffleNet 是Face++团队提出的晚于MobileNet两个月在arXiv上公开《ShuffleNet An Extremely Efficient Convolutional Neural Network for Mobile Devices 》用于移动端前向部署的网络架构。ShuffleNet基于MobileNet的group思想将卷积操作限制到特定的输入通道。而与之不同的是ShuffleNet将输入的group进行打散从而保证每个卷积核的感受野能够分散到不同group的输入中增加了模型的学习能力。
@ -481,14 +481,14 @@ ShuffleNet 是Face++团队提出的晚于MobileNet两个月在arXiv上公开
#### 5.2 网络架构
MobileNet中1\*1卷积的操作占据了约95%的计算量所以作者将1\*1也更改为group卷积使得相比MobileNet的计算量大大减少。
![image](./img/ch17/22.png)
![image](img/ch17/22.png)
group卷积与DW存在同样使“通道信息交流不畅”的问题MobileNet中采用PW conv解决上述问题SheffleNet中采用channel shuffle。
ShuffleNet的shuffle操作如图所示
![image](./img/ch17/24.png)
![image](img/ch17/24.png)
avg pooling和DW conv(s=2)会减小feature map的分辨率采用concat增加通道数从而弥补分辨率减小而带来信息的损失实验表明多多使用通道(提升通道的使用率),有助于提高小模型的准确率。
![image](./img/ch17/23.png)
![image](img/ch17/23.png)
网络结构:
![image](./img/ch17/25.png)
![image](img/ch17/25.png)
### 17.9.6 ShuffleNet-v2
huffleNet-v2 是Face++团队提出的《ShuffleNet V2: Practical Guidelines for Ecient CNN Architecture Design》旨在设计一个轻量级但是保证精度、速度的深度网络。
@ -508,9 +508,9 @@ huffleNet-v2 是Face++团队提出的《ShuffleNet V2: Practical Guidelines for
depthwise convolution 和 瓶颈结构增加了 MAC用了太多的 group跨层连接中的 element-wise Add 操作也是可以优化的点。所以在 shuffleNet V2 中增加了几种新特性。
所谓的 channel split 其实就是将通道数一分为2化成两分支来代替原先的分组卷积结构G2并且每个分支中的卷积层都是保持输入输出通道数相同G1其中一个分支不采取任何操作减少基本单元数G3最后使用了 concat 代替原来的 elementy-wise add并且后面不加 ReLU 直接G4再加入channle shuffle 来增加通道之间的信息交流。 对于下采样层,在这一层中对通道数进行翻倍。 在网络结构的最后,即平均值池化层前加入一层 1x1 的卷积层来进一步的混合特征。
![image](./img/ch17/26.png)
![image](img/ch17/26.png)
网络结构
![image](./img/ch17/27.png)
![image](img/ch17/27.png)
#### 6.4 ShuffleNet-v2具有高精度的原因
* 由于高效可以增加更多的channel增加网络容量
@ -608,7 +608,7 @@ ANDROID_PLATFORM 指定最低系统版本,"android-14" 就是 android-4.0
QNNPACK 的输入矩阵来自低精度、移动专用的计算机视觉模型。其它库在计算A和B矩阵相乘时重新打包 A 和 B 矩阵以更好地利用缓存层次结构希望在大量计算中分摊打包开销QNNPACK 删除所有计算非必需的内存转换,针对 A和B矩阵相乘适用于一级缓存的情况进行了优化。
![](./img/ch17/QNNPACK1.jpeg)
![](img/ch17/QNNPACK1.jpeg)
1优化了L1缓存计算不需要输出中间结果直接输出最终结果节省内存带宽和缓存占用。
@ -617,7 +617,7 @@ QNNPACK 的输入矩阵来自低精度、移动专用的计算机视觉模型。
- 常规实现:在量化矩阵-矩阵乘法中8位整数的乘积通常会被累加至 32 位的中间结果中,随后重新量化以产生 8 位的输出。遇到大矩阵尺寸时比如有时K太大A和B的面板无法直接转入缓存此时需利用缓存层次结构借助GEMM将A和B的面板沿着K维分割成固定大小的子面板以便于每个子面板都能适应L1缓存随后为每个子面板调用微内核。这一缓存优化需要 PDOT 为内核输出 32 位中间结果,最终将它们相加并重新量化为 8 位整数。
- 优化实现:由于 ONNPACK 对于面板 A 和 B 总是适应 L1 缓存的移动神经网络进行了优化,因此它在调用微内核时处理整个 A 和 B 的面板。而由于无需在微内核之外积累 32 位的中间结果QNNPACK 会将 32 位的中间结果整合进微内核中并写出 8 位值,这节省了内存带宽和缓存占用。
![](./img/ch17/QNNPACK2.jpeg)
![](img/ch17/QNNPACK2.jpeg)
2取消了矩阵 A 的重新打包。
@ -637,7 +637,7 @@ QNNPACK 的输入矩阵来自低精度、移动专用的计算机视觉模型。
2)**从矩阵相乘到卷积**
![](./img/ch17/QNNPACK3.jpeg)
![](img/ch17/QNNPACK3.jpeg)
传统实现:
@ -655,7 +655,7 @@ QNNPACK 的输入矩阵来自低精度、移动专用的计算机视觉模型。
3)**深度卷积**
![](./img/ch17/QNNPACK4.jpeg)
![](img/ch17/QNNPACK4.jpeg)
分组卷积grouped convolution将输入和输出通道分割成多组然后对每个组进行分别处理。在有限条件下当组数等于通道数时该卷积就是深度卷积常用于当前的神经网络架构中。深度卷积对每个通道分别执行空间滤波展示了与正常卷积非常不同的计算模式。因此通常要向深度卷积提供单独实现QNNPACK 包括一个高度优化版本 3×3 深度卷积。
@ -673,17 +673,17 @@ QNNPACK 实现高性能的关键因素在于完美利用通用暂存器GPR
MobileNetV1 架构在使用深度卷积depthwise convolution使模型更适合移动设备方面具备开创性。MobileNetV1 包括几乎整个 1×1 卷积和 3×3 卷积。Facebook 研究者将量化 MobileNetV1 模型从 TensorFlow Lite 转换而来,并在 TensorFlow Lite 和 QNNPACK 的 32-bit ARM 设备上对 MobileNetV1 进行基准测试。二者运行时均使用 4 线程,研究者观察到 QNNPACK 的运行速度几何平均值是 TensorFlow Lite 的 1.8 倍。
![](./img/ch17/mv1.jpg)
![](img/ch17/mv1.jpg)
**MobileNetV2**
作为移动视觉任务的当前最优架构之一MobileNetV2 引入了瓶颈构造块和瓶颈之间的捷径连接。研究者在 MobileNetV2 分类模型的量化版上对比基于 QNNPACK 的 Caffe2 算子和 TensorFlow Lite 实现。使用的量化 Caffe2 MobileNetV2 模型已开源,量化 TensorFlow Lite 模型来自官方库https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/lite/g3doc/models.md。下表展示了二者在常用测试集上的 top1 准确率:
![](./img/ch17/mv2.jpg)
![](img/ch17/mv2.jpg)
Facebook 研究者利用这些模型建立了 Facebook AI 性能评估平台https://github.com/facebook/FAI-PEP的基准该基准基于 32-bit ARM 环境的大量手机设备。对于 TensorFlow Lite 线程设置,研究者尝试了一到四个线程,并报告了最快速的结果。结果显示 TensorFlow Lite 使用四线程的性能最优,因此后续研究中使用四线程来对比 TensorFlow Lite 和 QNNPACK。下表展示了结果以及在典型智能手机和高端机上基于 QNNPACK 的算子速度比 TensorFlow Lite 快得多。
![](./img/ch17/mv3.jpg)
![](img/ch17/mv3.jpg)
Facebook开源高性能内核库QNNPACK
https://baijiahao.baidu.com/s?id=1615725346726413945&wfr=spider&for=pc
@ -783,7 +783,7 @@ https://blog.csdn.net/zchang81/article/details/74280019
5、框架结构
![](./img/ch17/MDL1.png)
![](img/ch17/MDL1.png)
MDL 框架主要包括:**模型转换模块MDL Converter、模型加载模块Loader、网络管理模块Net、矩阵运算模块Gemmers及供 Android 端调用的 JNI 接口层JNI Interfaces。**
@ -850,7 +850,7 @@ MACE覆盖了常见的移动端计算设备CPUGPU和DSP并且提供
5、MACE的基本框架
![](./img/ch17/mace-arch.png)
![](img/ch17/mace-arch.png)
**MACE Model**
@ -868,7 +868,7 @@ CPU/GPU/DSP Runtime对应于各个计算设备的算子实现。
6、MACE使用的基本流程
![](./img/ch17/mace-work-flow-zh.png)
![](img/ch17/mace-work-flow-zh.png)
**1. 配置模型部署文件(.yml)**
@ -925,7 +925,7 @@ MACE提供了命令行benchmark工具可以细粒度的查看模型中所涉
MACE 支持 TensorFlow 和 Caffe 模型提供转换工具可以将训练好的模型转换成专有的模型数据文件同时还可以选择将模型转换成C++代码,支持生成动态库或者静态库,提高模型保密性。
![](./img/ch17/maca_com.jpg)
![](img/ch17/maca_com.jpg)
@ -966,7 +966,7 @@ TensorFlow Lite可以与Android 8.1中发布的神经网络API完美配合
5、架构
![](./img/ch17/tflite_artc.JPEG)
![](img/ch17/tflite_artc.JPEG)
其组件包括:
@ -1018,7 +1018,7 @@ Android Studio 3.0, SDK Version API26, NDK Version 14
PocketFlow 框架主要由两部分组件构成,分别是模型压缩/加速算法组件和超参数优化组件,具体结构如下图所示。
![](./img/ch17/framework_design.png)
![](img/ch17/framework_design.png)
开发者将未压缩的原始模型作为 PocketFlow 框架的输入,同时指定期望的性能指标,例如模型的压缩和/或加速倍数;在每一轮迭代过程中,超参数优化组件选取一组超参数取值组合,之后模型压缩/加速算法组件基于该超参数取值组合对原始模型进行压缩得到一个压缩后的候选模型基于对候选模型进行性能评估的结果超参数优化组件调整自身的模型参数并选取一组新的超参数取值组合以开始下一轮迭代过程当迭代终止时PocketFlow 选取最优的超参数取值组合以及对应的候选模型,作为最终输出,返回给开发者用作移动端的模型部署。
@ -1038,7 +1038,7 @@ PocketFlow 框架主要由两部分组件构成,分别是模型压缩/加速
- f) 超参数优化hyper-parameter optimization组件多数开发者对模型压缩算法往往不甚了解但超参数取值对最终结果往往有着巨大的影响因此团队引入了超参数优化组件采用了包括强化学习等算法以及 AI Lab 自研的 AutoML 自动超参数优化框架来根据具体性能需求,确定最优超参数取值组合。例如,对于通道剪枝算法,超参数优化组件可以自动地根据原始模型中各层的冗余程度,对各层采用不同的剪枝比例,在保证满足模型整体压缩倍数的前提下,实现压缩后模型识别精度的最大化。
![](./img/ch17/packflow1.jpg)
![](img/ch17/packflow1.jpg)
7、PocketFlow 性能
@ -1046,9 +1046,9 @@ PocketFlow 框架主要由两部分组件构成,分别是模型压缩/加速
在 CIFAR-10 数据集上PocketFlow 以 ResNet-56 作为基准模型进行通道剪枝,并加入了超参数优化和网络蒸馏等训练策略,实现了 2.5 倍加速下分类精度损失 0.4%3.3 倍加速下精度损失 0.7%,且显著优于未压缩的 ResNet-44 模型; 在 ImageNet 数据集上PocketFlow 可以对原本已经十分精简的 MobileNet 模型继续进行权重稀疏化,以更小的模型尺寸取得相似的分类精度;与 Inception-V1、ResNet-18 等模型相比,模型大小仅为后者的约 20~40%,但分类精度基本一致(甚至更高)。
![](./img/ch17/packflow2.jpg)
![](img/ch17/packflow2.jpg)
![](./img/ch17/packflow3.jpg)
![](img/ch17/packflow3.jpg)
相比于费时费力的人工调参PocketFlow 框架中的 AutoML 自动超参数优化组件仅需 10
余次迭代就能达到与人工调参类似的性能,在经过 100 次迭代后搜索得到的超参数组合可以降低约 0.6%
@ -1056,9 +1056,9 @@ PocketFlow 框架主要由两部分组件构成,分别是模型压缩/加速
ResNet-18 模型进行压缩时,取得了一致性的性能提升;当平均量化比特数为 4 比特时,超参数优化组件的引入可以将分类精度从 63.6%
提升至 68.1%(原始模型的分类精度为 70.3%)。
![](./img/ch17/packflow4.jpg)
![](img/ch17/packflow4.jpg)
![](./img/ch17/packflow5.jpg)
![](img/ch17/packflow5.jpg)
**参考文献**

View File

@ -48,7 +48,7 @@
&emsp;&emsp;Deeplearning4j在已建立的各个库及其在系统整体中的所处位置
![Deeplearning4j](./img/18-2-2.png)
![Deeplearning4j](img/18-2-2.png)
&emsp;&emsp;Github地址https://github.com/deeplearning4j/deeplearning4j
@ -60,11 +60,11 @@
&emsp;&emsp;Mahout算法库
![Mahout](./img/18-2-3-1.png)
![Mahout](img/18-2-3-1.png)
&emsp;&emsp;Mahout应用场景
![Mahout](./img/18-2-3-2.png)
![Mahout](img/18-2-3-2.png)
&emsp;&emsp;Github地址https://github.com/apache/mahout
@ -82,12 +82,12 @@
- 算法库:包含广义线性模型、推荐系统、聚类、决策树和评估的算法
- 实用程序:包括测试数据的生成、外部数据的读入等功能
![架构图](./img/18-2-4-1.png)
![架构图](img/18-2-4-1.png)
<center>架构图</center>
&emsp;&emsp;MLlib目前支持4种常见的机器学习问题: 分类、回归、聚类和协同过滤MLlib在Spark整个生态系统中的位置如图下图所示。
![生态系统位置](./img/18-2-4-2.png)
![生态系统位置](img/18-2-4-2.png)
<center>生态系统位置</center>
### 18.2.5 Ray
@ -117,10 +117,10 @@ Ray框架优点
&emsp;&emsp;架构设计一方面减少了跨节点的RPC开销另一方面也能规避中心节点的瓶颈问题。当然缺点也不是没有由于缺乏全局的任务视图无法进行全局规划因此任务的拓扑逻辑结构也就未必是最优的了。
![架构图](./img/18-2-5-1.png)
![架构图](img/18-2-5-1.png)
<center>架构图</center>
![任务调度图](./img/18-2-5-2.png)
![任务调度图](img/18-2-5-2.png)
<center>任务调度图</center>
&emsp;&emsp;Ray架构现状
@ -141,12 +141,12 @@ Ray框架优点
- 能集成Spark的批处理和交互查询。
- 为实现复杂的算法提供和批处理类似的简单接口。
![Spark Streaming架构图](./img/18-2-6-1.png)
![Spark Streaming架构图](img/18-2-6-1.png)
<center>Spark Streaming架构图</center>
&emsp;&emsp;Spark Streaming把实时输入数据流以时间片Δt 如1秒为单位切分成块。Spark Streaming会把每块数据作为一个RDD并使用RDD操作处理每一小块数据。每个块都会生成一个Spark Job处理最终结果也返回多块。
![Spark Streaming基本原理图](./img/18-2-6-2.png)
![Spark Streaming基本原理图](img/18-2-6-2.png)
<center>Spark Streaming基本原理图</center>
&emsp;&emsp;正如Spark Streaming最初的目标一样它通过丰富的API和基于内存的高速计算引擎让用户可以结合流式处理批处理和交互查询等应用。因此Spark Streaming适合一些需要历史数据和实时数据结合分析的应用场合。当然对于实时性要求不是特别高的应用也能完全胜任。另外通过RDD的数据重用机制可以得到更高效的容错处理。
@ -227,7 +227,7 @@ server1:4,server2:4,server3:4,server4:4 python train.py
&emsp;&emsp;Petastorm是一个由 Uber ATG 开发的开源数据访问库。这个库可以直接基于数 TB Parquet 格式的数据集进行单机或分布式训练和深度学习模型评估。Petastorm 支持基于 Python 的机器学习框架,如 Tensorflow、Pytorch 和 PySpark也可以直接用在 Python 代码中。
![深度学习集群](./img/18-2-9-1.png)
![深度学习集群](img/18-2-9-1.png)
<center>深度学习集群</center>
&emsp;&emsp;即使是在现代硬件上训练深度模型也很耗时,而且在很多情况下,很有必要在多台机器上分配训练负载。典型的深度学习集群需要执行以下几个步骤:
@ -239,17 +239,17 @@ server1:4,server2:4,server3:4,server4:4 python train.py
有了 Petastorm消费数据就像在 HDFS 或文件系统中创建和迭代读取对象一样简单。Petastorm 使用 PyArrow 来读取 Parquet 文件。
&emsp;&emsp;将多个数据源组合到单个表格结构中,从而生成数据集。可以多次使用相同的数据集进行模型训练和评估。
![深度学习集群](./img/18-2-9-2.png)
![深度学习集群](img/18-2-9-2.png)
<center>深度学习集群</center>
&emsp;&emsp;为分布式训练进行分片
在分布式训练环境中每个进程通常负责训练数据的一个子集。一个进程的数据子集与其他进程的数据子集正交。Petastorm 支持将数据集的读时分片转换为正交的样本集。
![Petastorm 将数据集的非重叠子集提供给参与分布式训练的不同机器](./img/18-2-9-3.png)
![Petastorm 将数据集的非重叠子集提供给参与分布式训练的不同机器](img/18-2-9-3.png)
<center>Petastorm 将数据集的非重叠子集提供给参与分布式训练的不同机器</center>
&emsp;&emsp;本地缓存
Petastorm 支持在本地存储中缓存数据。当网络连接速度较慢或带宽很昂贵时,这会派上用场。
![本地缓存](./img/18-2-9-4.png)
![本地缓存](img/18-2-9-4.png)
Github地址https://github.com/uber/petastorm
@ -260,10 +260,10 @@ Github地址https://github.com/uber/petastorm
&emsp;&emsp;满足的应用场景:
为了利用TensorFlow在现有的Spark和Hadoop集群上进行深度学习。而不需要为深度学习设置单独的集群。
![架构图](./img/18-2-10-1.png)
![架构图](img/18-2-10-1.png)
<center>架构图</center>
![运行流程图](./img/18-2-10-2.png)
![运行流程图](img/18-2-10-2.png)
<center>运行流程图</center>
&emsp;&emsp;优点:
@ -290,7 +290,7 @@ Github地址https://github.com/uber/petastorm
### 18.4.2 实时流计算过程
![](./img/18-4-1.png)
![](img/18-4-1.png)
&emsp;&emsp;我们以热卖产品的统计为例,看下传统的计算手段:
- 将用户行为、log等信息清洗后保存在数据库中.
@ -405,7 +405,7 @@ public static boolean isTick(Tuple tuple) {
有了上面的基础设施,我们还需要一些手段来完成“工程化”,将设想变为现实。
这里我们看看Michael G. Noll的滑动窗口设计。
![](./img/18-4-2.png)
![](img/18-4-2.png)
Topology
@ -427,7 +427,7 @@ Topology
上面的topology设计如下
![](./img/18-4-3.png)
![](img/18-4-3.png)
将聚合计算与时间结合起来
前文我们叙述了tick事件回调中会触发bolt的execute方法那可以这么做
@ -470,7 +470,7 @@ RollingCountBolt:
上面的代码可能有点抽象看下这个图就明白了tick一到窗口就滚动
![](./img/18-4-4.png)
![](img/18-4-4.png)
```
IntermediateRankingsBolt & TotalRankingsBolt
@ -526,7 +526,7 @@ TotalRankingsBolt的聚合排序方法
&emsp;&emsp;结语
&emsp;&emsp;下图可能就是我们想要的结果我们完成了t0 - t1时刻之间的热点话题统计.
![](./img/18-4-5.png)
![](img/18-4-5.png)
## 18.5 如何进行离线计算?
@ -580,11 +580,11 @@ TotalRankingsBolt的聚合排序方法
&emsp;&emsp;F-Measure是Precision和Recall加权调和平均
![F-Measure](./img/18-9-2-1.png)
![F-Measure](img/18-9-2-1.png)
&emsp;&emsp;当参数α=1时就是最常见的F1也即
![F-Measure](./img/18-9-2-2.png)
![F-Measure](img/18-9-2-2.png)
&emsp;&emsp;可知F1综合了P和R的结果当F1较高时则能说明试验方法比较有效。
@ -592,7 +592,7 @@ TotalRankingsBolt的聚合排序方法
&emsp;&emsp;E值表示查准率P和查全率R的加权平均值当其中一个为0时E值为1其计算公式
![E值](./img/18-9-3-1.png)
![E值](img/18-9-3-1.png)
&emsp;&emsp;b越大表示查准率的权重越大。

View File

@ -49,7 +49,7 @@
&emsp;&emsp;Deeplearning4j在已建立的各个库及其在系统整体中的所处位置
![Deeplearning4j](./img/18-2-2.png)
![Deeplearning4j](img/18-2-2.png)
&emsp;&emsp;Github地址https://github.com/deeplearning4j/deeplearning4j
@ -61,11 +61,11 @@
&emsp;&emsp;Mahout算法库
![Mahout](./img/18-2-3-1.png)
![Mahout](img/18-2-3-1.png)
&emsp;&emsp;Mahout应用场景
![Mahout](./img/18-2-3-2.png)
![Mahout](img/18-2-3-2.png)
&emsp;&emsp;Github地址https://github.com/apache/mahout
@ -86,12 +86,12 @@ MLlib主要包含三个部分
- 算法库:包含广义线性模型、推荐系统、聚类、决策树和评估的算法
- 实用程序:包括测试数据的生成、外部数据的读入等功能
![架构图](./img/18-2-4-1.png)
![架构图](img/18-2-4-1.png)
<center>架构图</center>
&emsp;&emsp;MLlib目前支持4种常见的机器学习问题: 分类、回归、聚类和协同过滤MLlib在Spark整个生态系统中的位置如图下图所示。
![生态系统位置](./img/18-2-4-2.png)
![生态系统位置](img/18-2-4-2.png)
<center>生态系统位置</center>
### 18.2.5 Ray
@ -122,10 +122,10 @@ Ray框架优点:
&emsp;&emsp;架构设计一方面减少了跨节点的RPC开销另一方面也能规避中心节点的瓶颈问题。当然缺点也不是没有由于缺乏全局的任务视图无法进行全局规划因此任务的拓扑逻辑结构也就未必是最优的了。
![架构图](./img/18-2-5-1.png)
![架构图](img/18-2-5-1.png)
<center>架构图</center>
![任务调度图](./img/18-2-5-2.png)
![任务调度图](img/18-2-5-2.png)
<center>任务调度图</center>
&emsp;&emsp;Ray架构现状
@ -148,11 +148,11 @@ Ray框架优点:
- 能集成Spark的批处理和交互查询。
- 为实现复杂的算法提供和批处理类似的简单接口。
![Spark Streaming架构图](./img/18-2-6-1.png)
![Spark Streaming架构图](img/18-2-6-1.png)
&emsp;&emsp;Spark Streaming把实时输入数据流以时间片Δt 如1秒为单位切分成块。Spark Streaming会把每块数据作为一个RDD并使用RDD操作处理每一小块数据。每个块都会生成一个Spark Job处理最终结果也返回多块。
![Spark Streaming基本原理图](./img/18-2-6-2.png)
![Spark Streaming基本原理图](img/18-2-6-2.png)
&emsp;&emsp;正如Spark Streaming最初的目标一样它通过丰富的API和基于内存的高速计算引擎让用户可以结合流式处理批处理和交互查询等应用。因此Spark Streaming适合一些需要历史数据和实时数据结合分析的应用场合。当然对于实时性要求不是特别高的应用也能完全胜任。另外通过RDD的数据重用机制可以得到更高效的容错处理。
@ -236,7 +236,7 @@ server1:4,server2:4,server3:4,server4:4 python train.py
&emsp;&emsp;Petastorm是一个由 Uber ATG 开发的开源数据访问库。这个库可以直接基于数 TB Parquet 格式的数据集进行单机或分布式训练和深度学习模型评估。Petastorm 支持基于 Python 的机器学习框架,如 Tensorflow、Pytorch 和 PySpark也可以直接用在 Python 代码中。
![深度学习集群](./img/18-2-9-1.png)
![深度学习集群](img/18-2-9-1.png)
&emsp;&emsp;即使是在现代硬件上训练深度模型也很耗时,而且在很多情况下,很有必要在多台机器上分配训练负载。典型的深度学习集群需要执行以下几个步骤:
@ -249,16 +249,16 @@ server1:4,server2:4,server3:4,server4:4 python train.py
&emsp;&emsp;将多个数据源组合到单个表格结构中,从而生成数据集。可以多次使用相同的数据集进行模型训练和评估。
![深度学习集群](./img/18-2-9-2.png)
![深度学习集群](img/18-2-9-2.png)
&emsp;&emsp;为分布式训练进行分片
在分布式训练环境中每个进程通常负责训练数据的一个子集。一个进程的数据子集与其他进程的数据子集正交。Petastorm 支持将数据集的读时分片转换为正交的样本集。
![Petastorm 将数据集的非重叠子集提供给参与分布式训练的不同机器](./img/18-2-9-3.png)
![Petastorm 将数据集的非重叠子集提供给参与分布式训练的不同机器](img/18-2-9-3.png)
Petastorm 将数据集的非重叠子集提供给参与分布式训练的不同机器
&emsp;&emsp;本地缓存
Petastorm 支持在本地存储中缓存数据。当网络连接速度较慢或带宽很昂贵时,这会派上用场。
![本地缓存](./img/18-2-9-4.png)
![本地缓存](img/18-2-9-4.png)
Github地址https://github.com/uber/petastorm
@ -269,9 +269,9 @@ Github地址https://github.com/uber/petastorm
&emsp;&emsp;满足的应用场景:
为了利用TensorFlow在现有的Spark和Hadoop集群上进行深度学习。而不需要为深度学习设置单独的集群。
![架构图](./img/18-2-10-1.png)
![架构图](img/18-2-10-1.png)
![运行流程图](./img/18-2-10-2.png)
![运行流程图](img/18-2-10-2.png)
&emsp;&emsp;优点:
@ -297,7 +297,7 @@ Github地址https://github.com/uber/petastorm
### 18.3.2 实时流计算过程
![](./img/18-4-1.png)
![](img/18-4-1.png)
&emsp;&emsp;我们以热卖产品的统计为例,看下传统的计算手段:
@ -417,7 +417,7 @@ public static boolean isTick(Tuple tuple) {
有了上面的基础设施,我们还需要一些手段来完成“工程化”,将设想变为现实。
这里我们看看Michael G. Noll的滑动窗口设计。
![](./img/18-4-2.png)
![](img/18-4-2.png)
Topology
@ -439,7 +439,7 @@ Topology
上面的topology设计如下
![](./img/18-4-3.png)
![](img/18-4-3.png)
将聚合计算与时间结合起来
前文我们叙述了tick事件回调中会触发bolt的execute方法那可以这么做
@ -482,7 +482,7 @@ RollingCountBolt:
上面的代码可能有点抽象看下这个图就明白了tick一到窗口就滚动
![](./img/18-4-4.png)
![](img/18-4-4.png)
```
IntermediateRankingsBolt & TotalRankingsBolt
@ -539,7 +539,7 @@ TotalRankingsBolt的聚合排序方法
&emsp;&emsp;下图可能就是我们想要的结果我们完成了t0 - t1时刻之间的热点话题统计.
![](./img/18-4-5.png)
![](img/18-4-5.png)
## 18.4 如何进行离线计算?
@ -1096,7 +1096,7 @@ TotalRankingsBolt的聚合排序方法
等功能。
<center>【架构设计图】</center>
![架构设计图](./img/18-5-1-1.jpg)
![架构设计图](img/18-5-1-1.jpg)
### 18.5.2 如何设计人机交互系统的问答引擎算法架构?
@ -1105,7 +1105,7 @@ TotalRankingsBolt的聚合排序方法
本章节介绍的问答引擎架构由预处理模块、检索模块、知识图谱、排序模块、用户画像组成。
![架构图](./img/18-5-2-2.jpg)
![架构图](img/18-5-2-2.jpg)
检索模块如果能完全命中语料库答案则直接返回,不在经过排序。
@ -1157,11 +1157,11 @@ ES检索和深度语义匹配是比较粗比较弱的召回模型不用考虑
- **字典纠错:字典+规则,特定数据驱动型纠错**
![](./img/18-5-4-1.jpg)
![](img/18-5-4-1.jpg)
- **通用纠错模型:神经网络模型,其他纠错保底**
![](./img/18-5-4-2.jpg)
![](img/18-5-4-2.jpg)
### 18.5.5 什么是指代消解?如何指代消解?
@ -1217,7 +1217,7 @@ ES检索和深度语义匹配是比较粗比较弱的召回模型不用考虑
孪生神经网络在涉及发现相似性或两个可比较的事物之间的关系的任务中流行。 一些例子是复述评分,其中输入是两个句子,输出是它们是多么相似的得分; 或签名验证,确定两个签名是否来自同一个人。 通常,在这样的任务中,使用两个相同的子网络来处理两个输入,并且另一个模块将取得它们的输出并产生最终输出。 下面的图片来自Bromley et al (1993)【11】。 他们为签名验证任务提出了一个孪生体系结构。
![](./img/18-5-6-1.png)
![](img/18-5-6-1.png)
孪生结构之所以在这些任务中表现的比较好,有如下几个原因
@ -1240,7 +1240,7 @@ $$
基本方法构建文本与文本的相似度矩阵采用CNN对矩阵进行特征抽取最后用softmax获得分类概率评价方法为交叉熵。
![](./img/18-5-6-2.png)
![](img/18-5-6-2.png)
流程:
@ -1250,17 +1250,17 @@ $$
- 0-1类型每个序列对应的词相同为1不同为0
![](./img/18-5-6-3.png)
![](img/18-5-6-3.png)
- cosine距离使用预训练的Glove将词转为向量之后计算序列对应的词的cosine距离
![](./img/18-5-6-4.png)
![](img/18-5-6-4.png)
- 点积同上但是将cosine距离改为点积
![](./img/18-5-6-5.png)
![](img/18-5-6-5.png)
- [x] 两层CNN
@ -1281,7 +1281,7 @@ $$
&emsp;&emsp;Annoy的目标是建立一个数据结构使得查询一个点的最近邻点的时间复杂度是次线性。Annoy通过建立一个二叉树来使得每个点查找时间复杂度是O(log n)。 看下面这个图随机选择两个点以这两个节点为初始中心节点执行聚类数为2的kmeans过程最终产生收敛后两个聚类中心点。这两个聚类中心点之间连一条线段灰色短线建立一条垂直于这条灰线并且通过灰线中心点的线黑色粗线。这条黑色粗线把数据空间分成两部分。在多维空间的话这条黑色粗线可以看成等距垂直超平面。
![](./img/18-5-6-1.jpg)
![](img/18-5-6-1.jpg)
&emsp;&emsp;通过多次递归迭代划分的话最终原始数据会形成类似下面这样一个二叉树结构。二叉树底层是叶子节点记录原始数据节点其他中间节点记录的是分割超平面的信息。Annoy建立这样的二叉树结构是希望满足这样的一个假设: 相似的数据节点应该在二叉树上位置更接近,一个分割超平面不应该把相似的数据节点分割二叉树的不同分支上。
@ -1295,7 +1295,7 @@ $$
&emsp;&emsp;问题有歧义或者匹配答案有置信度但不够高的时候触发话术澄清。简单来说,就是明确意图,意图不明确的时候可以反问用户以确认。
![](./img/18-5-7-1.jpg)
![](img/18-5-7-1.jpg)
&emsp;&emsp;意图图谱的节点代表一个个意图节点。这些“意图”之间的关系包括需求澄清disambiguation、需求细化depth extension、需求横向延展breadth extension )等。在图所示例子中,当“阿拉斯加”的意思是“阿拉斯加州”时,与之关联的意图是城市、旅游等信息。当“阿拉斯加”的含义是“阿拉斯加犬”时,它延伸的意图是宠物狗、宠物狗护理,以及如何喂食等。
@ -1311,7 +1311,7 @@ $$
使用相同的MLP网络独立地计算每一个q-term encoding矩阵的每一行的分数再通过一个线性层得到query与doc的相关性得分 。
![](./img/18-5-9-0.jpg)
![](img/18-5-9-0.jpg)
github地址https://github.com/nlpaueb/deep-relevance-ranking
@ -1493,7 +1493,7 @@ $$
**具体地**以Bi-gram为例我们有这样一个由三句话组成的语料库
![](./img/18-5-9-1.jpg)
![](img/18-5-9-1.jpg)
容易统计“I”出现了3次“I am”出现了2次因此能计算概率
$$
@ -1555,7 +1555,7 @@ $p(I<s>)=0.67p(doI)=0.33p(Samam)=0.5p(notdo)=1p(<s>Sam)=0.5p(like
### 18.6.2 如何设计个性化推荐系统的推荐引擎架构?
![](./img/18-6-2-1.jpg)
![](img/18-6-2-1.jpg)
### 18.6.3 召回模块
@ -1581,13 +1581,13 @@ $p(I<s>)=0.67p(doI)=0.33p(Samam)=0.5p(notdo)=1p(<s>Sam)=0.5p(like
- 排序算法演进
![](./img/18-6-2-2.jpg)
![](img/18-6-2-2.jpg)
### 18.6.5 离线训练
- 离线训练流程
![](./img/18-6-5-1.jpg)
![](img/18-6-5-1.jpg)
- 如何线上实时反馈特征?
@ -1599,15 +1599,15 @@ $p(I<s>)=0.67p(doI)=0.33p(Samam)=0.5p(notdo)=1p(<s>Sam)=0.5p(like
> - 所有新闻自身CTR(r)服从Beta分布:
>
> ![](./img/18-6-5-2.png)
> ![](img/18-6-5-2.png)
>
> - 某一新闻给定展示次数时和自身CTR,点击次数服从伯努利分布曝光次数为I,点击次数为C:
>
> ![](./img/18-6-5-3.png)
> ![](img/18-6-5-3.png)
>
> - 对最大似然函数求解参数αβ则i新闻CTR后验估计
>
> ![](./img/18-5-6-6.png)
> ![](img/18-5-6-6.png)
>
> - 对曝光不足的做平滑,曝光充分的影响不大
@ -1644,7 +1644,7 @@ $p(I<s>)=0.67p(doI)=0.33p(Samam)=0.5p(notdo)=1p(<s>Sam)=0.5p(like
- **FM模型**
![](./img/18-6-8-1.png)
![](img/18-6-8-1.png)
$$
$$
@ -1754,13 +1754,13 @@ $p(I<s>)=0.67p(doI)=0.33p(Samam)=0.5p(notdo)=1p(<s>Sam)=0.5p(like
原理根据已有的评分矩阵非常稀疏分解为低维的用户特征矩阵评分者对各个因子的喜好程度以及商品特征矩阵商品包含各个因子的程度最后再反过来分析数据用户特征矩阵与商品特征矩阵相乘得到新的评分矩阵得出预测结果这是一个非常优雅的推荐算法因为当涉及到矩阵分解时我们通常不会太多地去思考哪些项目将停留在所得到矩阵的列和行中。但是使用这个推荐引擎我们清楚地看到u是第i个用户的兴趣向量v是第j个电影的参数向量。
![](./img/18-6-2-4.png)
![](img/18-6-2-4.png)
所以我们可以用u和v的点积来估算x(第i个用户对第j个电影的评分)。我们用已知的分数构建这些向量,并使用它们来预测未知的得分。
例如在矩阵分解之后Ted的向量是(1.4; .8)电影A的向量是(1.4; .9),现在,我们可以通过计算(1.4; .8)和(1.4; .9)的点积来还原电影A-Ted的得分。结果我们得到2.68分。
![](./img/18-6-2-5.png)
![](img/18-6-2-5.png)
- 基于热门内容的推荐算法
@ -1772,7 +1772,7 @@ $p(I<s>)=0.67p(doI)=0.33p(Samam)=0.5p(notdo)=1p(<s>Sam)=0.5p(like
&emsp;&emsp;准确率和召回率是广泛用于信息检索和统计学分类领域的两个度量值,用来评价结果的质量。其中精度是检索出相关文档数与检索出的文档总数的比率,衡量的是检索系统的查准率;召回率是指检索出的相关文档数和文档库中所有的相关文档数的比率,衡量的是检索系统的查全率。
![](./img/18-6-3-0.jpg)
![](img/18-6-3-0.jpg)
&emsp;&emsp;一般来说Precision就是检索出来的条目比如文档、网页等有多少是准确的Recall就是所有准确的条目有多少被检索出来了。
@ -1808,13 +1808,13 @@ $p(I<s>)=0.67p(doI)=0.33p(Samam)=0.5p(notdo)=1p(<s>Sam)=0.5p(like
**注意:准确率和召回率是互相影响的,理想情况下肯定是做到两者都高,但是一般情况下准确率高、召回率就低,召回率低、准确率高,当然如果两者都低,那是什么地方出问题了**。一般情况,用不同的阀值,统计出一组不同阀值下的精确率和召回率,如下图:
![](./img/18-6-3-1.jpg)
![](img/18-6-3-1.jpg)
**如果是做搜索,那就是保证召回的情况下提升准确率;如果做疾病监测、反垃圾,则是保准确率的条件下,提升召回。**
所以在两者都要求高的情况下可以用F1值来衡量。
![F-Measure](./img/18-9-2-2.png)
![F-Measure](img/18-9-2-2.png)
公式基本上就是这样但是如何算图中的A、B、C、D呢**这需要人工标注,人工标注数据需要较多时间且枯燥,如果仅仅是做实验可以用用现成的语料。当然,还有一个办法,找个一个比较成熟的算法作为基准,用该算法的结果作为样本来进行比照**,这个方法也有点问题,如果有现成的很好的算法,就不用再研究了。
@ -1824,11 +1824,11 @@ $p(I<s>)=0.67p(doI)=0.33p(Samam)=0.5p(notdo)=1p(<s>Sam)=0.5p(like
&emsp;&emsp;F-Measure是Precision和Recall加权调和平均
![F-Measure](./img/18-9-2-1.png)
![F-Measure](img/18-9-2-1.png)
&emsp;&emsp;当参数α=1时就是最常见的F1也即
![F-Measure](./img/18-9-2-2.png)
![F-Measure](img/18-9-2-2.png)
&emsp;&emsp;可知F1综合了P和R的结果当F1较高时则能说明试验方法比较有效。
@ -1836,7 +1836,7 @@ $p(I<s>)=0.67p(doI)=0.33p(Samam)=0.5p(notdo)=1p(<s>Sam)=0.5p(like
&emsp;&emsp;E值表示查准率P和查全率R的加权平均值当其中一个为0时E值为1其计算公式
![E值](./img/18-9-3-1.png)
![E值](img/18-9-3-1.png)
&emsp;&emsp;b越大表示查准率的权重越大。
@ -1848,7 +1848,7 @@ $p(I<s>)=0.67p(doI)=0.33p(Samam)=0.5p(notdo)=1p(<s>Sam)=0.5p(like
mAP是为解决P准确率R召回率F-measure的单点值局限性的。为了得到 一个能够反映全局性能的指标,可以看考察下图,其中两条曲线(方块点与圆点)分布对应了两个检索系统的准确率-召回率曲线 。
![](./img/18-6-3-2.jpg)
![](img/18-6-3-2.jpg)
可以看出,虽然两个系统的性能曲线有所交叠但是以圆点标示的系统的性能在绝大多数情况下要远好于用方块标示的系统。
@ -1858,13 +1858,13 @@ $p(I<s>)=0.67p(doI)=0.33p(Samam)=0.5p(notdo)=1p(<s>Sam)=0.5p(like
最理想的系统, 其包含的面积应当是1而所有系统的包含的面积都应当大于0。这就是用以评价信息检索系统的最常用性能指标平均准确率mAP其规范的定义如下:
![](./img/18-6-3-3.jpg)
![](img/18-6-3-3.jpg)
- **ROC和AUC**
ROC和AUC是评价分类器的指标上面第一个图的ABCD仍然使用只是需要稍微变换。
![](./img/18-6-3-4.jpg)
![](img/18-6-3-4.jpg)
ROC关注两个指标
@ -1875,7 +1875,7 @@ $p(I<s>)=0.67p(doI)=0.33p(Samam)=0.5p(notdo)=1p(<s>Sam)=0.5p(like
在ROC 空间中每个点的横坐标是FPR纵坐标是TPR这也就描绘了分类器在TP真正的正例和FP错误的正例间的trade-off。ROC的主要分析工具是一个画在ROC空间的曲线——ROC curve。我们知道对于二值分类问题实例的值往往是连续值我们通过设定一个阈值将实例分类到正类或者负类比如大于阈值划分为正类。因此我们可以变化阈值根据不同的阈值进行分类根据分类结果计算得到ROC空间中相应的点连接这些点就形成ROC curve。ROC curve经过0,01,1实际上(0, 0)和(1, 1)连线形成的ROC curve实际上代表的是一个随机分类器。一般情况下这个曲线都应该处于(0, 0)和(1, 1)连线的上方。如图所示。
![](./img/18-6-3-5.jpg)
![](img/18-6-3-5.jpg)
用ROC curve来表示分类器的performance很直观好用。可是人们总是希望能有一个数值来标志分类器的好坏。
@ -1895,13 +1895,13 @@ $p(I<s>)=0.67p(doI)=0.33p(Samam)=0.5p(notdo)=1p(<s>Sam)=0.5p(like
*YouTube的推荐系统算法由两个神经网络组成一个用于候选生成一个用于排序。如果你没时间仔细研究论文可以看看我们下面给出的简短总结。* 【14】
![](./img/18-6-4-1.png)
![](img/18-6-4-1.png)
以用户的浏览历史为输入,候选生成网络可以显著减小可推荐的视频数量,从庞大的库中选出一组最相关的视频。这样生成的候选视频与用户的相关性最高,然后我们会对用户评分进行预测。
这个网络的目标,只是通过协同过滤提供更广泛的个性化。
![](./img/18-6-4-2.png)
![](img/18-6-4-2.png)
进行到这一步,我们得到一组规模更小但相关性更高的内容。我们的目标是仔细分析这些候选内容,以便做出最佳的选择。
@ -1909,11 +1909,11 @@ $p(I<s>)=0.67p(doI)=0.33p(Samam)=0.5p(notdo)=1p(<s>Sam)=0.5p(like
所谓排序就是根据视频描述数据和用户行为信息,使用设计好的目标函数为每个视频打分,得分最高的视频会呈献给用户。
![](./img/18-6-4-3.png)
![](img/18-6-4-3.png)
通过这两步,我们可以从非常庞大的视频库中选择视频,并面向用户进行有针对性的推荐。这个方法还能让我们把其他来源的内容也容纳进来。
![](./img/18-6-4-4.png)
![](img/18-6-4-4.png)
推荐任务是一个极端的多类分类问题。这个预测问题的实质,是基于用户(U)和语境(C)在给定的时间t精确地从库(V)中上百万的视频类(i)中,对特定的视频观看(Wt)情况进行分类。

View File

@ -92,7 +92,7 @@
### 19.3.3 申请国内发明专利提示
&emsp;&emsp;下边给出一个精心调整过的申请该类专利的模板。[模板下载](./img/1.doc)(注意,不是这个模板也可以,但是要符合顺序)
&emsp;&emsp;下边给出一个精心调整过的申请该类专利的模板。[模板下载](img/1.doc)(注意,不是这个模板也可以,但是要符合顺序)
&emsp;&emsp;注意,摘要附图以及说明书附图可以无图(仅指发明),还有一些具体的格式要求,可以自己去查询专利申请的要求,这里给出最常见的几个注意点:

5065
docsify.js Normal file

File diff suppressed because it is too large Load Diff

86
index.html Normal file
View File

@ -0,0 +1,86 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>深度学习500问</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta name="description" content="Description">
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<link rel="stylesheet" href="//unpkg.com/docsify/lib/themes/vue.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.10.0-rc.1/dist/katex.min.css">
<script src="https://cdn.jsdelivr.net/npm/katex@0.10.0-rc.1/dist/katex.min.js"></script>
<style>
.sidebar>h1 a {
font-size: 20px;
color: black;
}
.content {
padding-top: 5px;
}
.markdown-section {
padding-top: 10px;
}
</style>
</head>
<body>
<div id="app"></div>
<script>
window.$docsify = {
themeColor: '#fc7e09',
loadSidebar: true,
maxLevel: 2,
subMaxLevel: 2,
auto2top: true,
alias: {
'/.*/_sidebar.md': '/_sidebar.md',
},
markdown: {
latexRender: katex.renderToString.bind(katex)
},
search: {
placeholder: 'Type to search',
noData: 'No Results!',
paths: 'auto',
depth: 6
},
plugins: [
function(hook, vm) {
hook.beforeEach(function(content) {
// 每次开始解析 Markdown 内容时调用
// 将所有../img替换成img
// https://github.com/docsifyjs/docsify/issues/936
return content.replace(/..\/img/g, "img");
})
hook.doneEach(function () {
window.MathJax.Hub.Queue(["Typeset", MathJax.Hub, document.getElementById('app')]);
})
}
],
externalLinkTarget: '_target',
name: '深度学习500问',
repo: 'https://github.com/scutan90/DeepLearning-500-questions'
}
</script>
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
extensions: ["tex2jax.js"],
jax: ["input/TeX", "output/HTML-CSS"],
tex2jax: {
inlineMath: [ ['$','$'], ["\\(","\\)"] ],
displayMath: [ ['$$','$$'], ["\\[","\\]"] ],
processEscapes: true,
skipTags: ["script", "noscript", "style", "textarea", "pre", "code", "a"]
},
"HTML-CSS": { fonts: ["TeX"] }
});
</script>
<script src="docsify.js"></script>
<script src="//unpkg.com/docsify/lib/plugins/zoom-image.js"></script>
<script src="//unpkg.com/docsify-copy-code"></script>
<script src="//unpkg.com/prismjs/components/prism-bash.js"></script>
<script src="//unpkg.com/prismjs/components/prism-python.js"></script>
<script src="//unpkg.com/docsify/lib/plugins/search.js"></script>
<script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
</body>
</html>