# Forecasting Steel Production in the World--Assessments Based on Shallow and Deep Neural Networks
## 3 Artificial Intelligence Predictive Models
### Multilayer Perceptron  
Multilayer perceptron neural networks (MLP) are a type of feedforward neural network. They are generally used due to their fast operation, ease of implementation, and training set requirements [46; 47; 48]. MLP's have been successfully applied to a wide range of problems, such as complex and nonlinear modeling, classification, prediction, and pattern recognition.  
In the MLP, each artificial neuron, receives data from the network input or from other neurons, and produces an output which is a function of the input values and the neuron's internal training values.  
An MLP model with an insufficient or excessive number of neurons in the hidden layer, for the type of problem being solved, is likely to have problems learning. Convergence is difficult and that leads to time-consuming adjustments. Too few neurons cannot retain enough data and there is underfitting. Too many neurons learn the problem instead of generalizing, and there is overfitting of the data. As yet, there is no analytical method by which to determine the right number of neurons in the hidden layer, only practical recommendations based on experience. In general, a rule is to put a hidden layer with a number of neurons that is the average between the input and the output layer. This number is then optimized through trial-and-error experiments [49; 50].  
Usually, the selection of the training algorithm is dependent on factors such as the organization of the network, the number of hidden layers, weights and biases, learning error rate, etc. Error gradient-based algorithms are common. They work by adjusting the weights in function of the gradient of the error between the output desired and the output obtained. Slow convergence and high dependence on initial parameters, and the tendency to get stuck in local minima are the limitations of gradient-based algorithms [51].  
For a given neuron \(j\), each neural input signal \((x_{k})\) is multiplied by their respective corresponding weight values \((w_{kj})\), and the resulting products are added to generate a total weight in the form of \(w_{1}x_{1}+w_{2}x_{2}+\cdots+w_{jm}x_{m}\). The sum of the weighted inputs and the bias Equation (1) forms the input for the activation function, \(\varphi\). The activation function \(\varphi\) processes this sum and provides the output, \(U_{j}\) neuron output, according to Equation (2) and Figure 4[52; 53]. We have  
\[S_{j}=\sum_{k=1}^{m_{j}}w_{jk}\times x_{k}j+b_{j} \tag{1}\]  
\[U_{j}=\varphi(S_{j})=\varphi(\sum_{k=1}^{m_{j}}w_{jk}\times x_{k}j+b_{j}). \tag{2}\]  
The symbol \(w_{ji}^{H}\) denotes the synaptic weight between the neuron leaving the hidden layer and the neuron entering the output layer: the symbol \(b_{j}^{H}\) denotes the neuron bias in the hidden layer; the superscript \(O\) is the output layer. In the figure, the green circles indicate biases, which are constants corresponding to the intersection in the conventional regression model [54].  
This type of network can be trained by using many different algorithms. Backpropagation is possibly the most common. Other approaches include resilient backpropagation (RPROP) with or without weight backtracking, described in [55], or the globally convergent version (GRPROP) [56].  
MLP neural networks are supported by many popular machine learning frameworks. In the Python sklearn library, they are implemented by MLPClassifier and MLPRegressor functions [57].  
In the deep learning framework Tensorflow, the function neuralnet implements a sequential model with dense layers [58].