{"id":3511,"date":"2026-06-11T09:41:03","date_gmt":"2026-06-11T09:41:03","guid":{"rendered":"https:\/\/www.mhtechin.com\/support\/?p=3511"},"modified":"2026-06-11T09:41:03","modified_gmt":"2026-06-11T09:41:03","slug":"the-perceptron","status":"publish","type":"post","link":"https:\/\/www.mhtechin.com\/support\/the-perceptron\/","title":{"rendered":"The Perceptron"},"content":{"rendered":"\n<h3 class=\"wp-block-heading\">The Perceptron: The Foundation Stone of Neural Networks and Modern AI<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">Introduction<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">In the sprawling, complex landscape of artificial intelligence, certain ideas stand as monumental pillars. The Transformer architecture might dominate today\u2019s chatbots, and Convolutional Neural Networks might power facial recognition, but all of modern deep learning traces its lineage back to a single, deceptively simple mathematical construct: the&nbsp;<strong>Perceptron<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Invented in 1957 by Frank Rosenblatt at the Cornell Aeronautical Laboratory, the perceptron was not merely an algorithm; it was a bold hypothesis. Rosenblatt built the Mark I Perceptron, a hardware machine with 400 photocells connected to motors and potentiometers, designed to &#8220;learn&#8221; to recognize patterns. While the AI of 2025 has advanced into generative text and multimodal understanding, the fundamental challenge the perceptron solved\u2014binary classification through a trainable weight system\u2014remains the beating heart of every neural network deployed today.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This article will dissect the perceptron from its mathematical first principles to its historical impact, its limitations, and its enduring legacy in the age of deep learning.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">The Biological Inspiration: The Neuron<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">To understand the perceptron, one must first look at its muse: the biological neuron. In the human brain, a neuron receives signals through branched structures called dendrites. These signals are electrochemical impulses that travel toward the cell body (soma). If the combined strength of these incoming signals exceeds a certain threshold, the neuron &#8220;fires,&#8221; sending an output signal down the axon to the next neuron via synapses.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Rosenblatt abstracted this process into a computational model. He ignored the complex biochemistry and focused solely on the logic:&nbsp;<strong>Inputs \u2192 Weighted Sum \u2192 Threshold Activation \u2192 Output<\/strong>. This reductionism was the genius of the perceptron. It transformed biology into a binary classifier.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Mathematical Architecture of the Perceptron<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Let us demystify the mathematics. A perceptron is a function that maps an input vector&nbsp;<math><semantics><mrow><mi mathvariant=\"bold\">x<\/mi><\/mrow><\/semantics><\/math><strong>x<\/strong>&nbsp;(a set of features) to an output value&nbsp;<math><semantics><mrow><mi>y<\/mi><\/mrow><\/semantics><\/math><em>y<\/em>&nbsp;(a binary label, typically 0 or 1, or -1 or +1).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 1: The Weighted Sum<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The perceptron accepts multiple binary or real-valued inputs:&nbsp;<math><semantics><mrow><msub><mi>x<\/mi><mn>1<\/mn><\/msub><mo separator=\"true\">,<\/mo><msub><mi>x<\/mi><mn>2<\/mn><\/msub><mo separator=\"true\">,<\/mo><mi mathvariant=\"normal\">.<\/mi><mi mathvariant=\"normal\">.<\/mi><mi mathvariant=\"normal\">.<\/mi><mo separator=\"true\">,<\/mo><msub><mi>x<\/mi><mi>n<\/mi><\/msub><\/mrow><\/semantics><\/math><em>x<\/em>1\u200b,<em>x<\/em>2\u200b,&#8230;,<em>x<\/em><em>n<\/em>\u200b. Each input&nbsp;<math><semantics><mrow><msub><mi>x<\/mi><mi>i<\/mi><\/msub><\/mrow><\/semantics><\/math><em>x<\/em><em>i<\/em>\u200b&nbsp;has a corresponding weight&nbsp;<math><semantics><mrow><msub><mi>w<\/mi><mi>i<\/mi><\/msub><\/mrow><\/semantics><\/math><em>w<\/em><em>i<\/em>\u200b. The weight represents the strength (or importance) of that input. Additionally, there is a &#8220;bias&#8221; term&nbsp;<math><semantics><mrow><mi>b<\/mi><\/mrow><\/semantics><\/math><em>b<\/em>&nbsp;(or&nbsp;<math><semantics><mrow><msub><mi>w<\/mi><mn>0<\/mn><\/msub><\/mrow><\/semantics><\/math><em>w<\/em>0\u200b) which acts like the neuron\u2019s threshold.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">First, the perceptron computes a weighted sum (also called the net input&nbsp;<math><semantics><mrow><mi>z<\/mi><\/mrow><\/semantics><\/math><em>z<\/em>):<math display=\"block\"><semantics><mrow><mi>z<\/mi><mo>=<\/mo><mi>b<\/mi><mo>+<\/mo><munderover><mo>\u2211<\/mo><mrow><mi>i<\/mi><mo>=<\/mo><mn>1<\/mn><\/mrow><mi>n<\/mi><\/munderover><msub><mi>w<\/mi><mi>i<\/mi><\/msub><msub><mi>x<\/mi><mi>i<\/mi><\/msub><\/mrow><\/semantics><\/math><em>z<\/em>=<em>b<\/em>+<em>i<\/em>=1\u2211<em>n<\/em>\u200b<em>w<\/em><em>i<\/em>\u200b<em>x<\/em><em>i<\/em>\u200b<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 2: The Activation Function (Step Function)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Unlike modern neural networks that use smooth activation functions like ReLU or Sigmoid, the original perceptron uses a harsh, discontinuous&nbsp;<strong>step function<\/strong>&nbsp;(also known as the Heaviside function).<math display=\"block\"><semantics><mrow><mi>y<\/mi><mo>=<\/mo><mi>\u03d5<\/mi><mo stretchy=\"false\">(<\/mo><mi>z<\/mi><mo stretchy=\"false\">)<\/mo><mo>=<\/mo><mrow><mo fence=\"true\">{<\/mo><mtable rowspacing=\"0.36em\" columnalign=\"left left\" columnspacing=\"1em\"><mtr><mtd><mstyle scriptlevel=\"0\" displaystyle=\"false\"><mn>1<\/mn><\/mstyle><\/mtd><mtd><mstyle scriptlevel=\"0\" displaystyle=\"false\"><mrow><mtext>if&nbsp;<\/mtext><mi>z<\/mi><mo>\u2265<\/mo><mn>0<\/mn><\/mrow><\/mstyle><\/mtd><\/mtr><mtr><mtd><mstyle scriptlevel=\"0\" displaystyle=\"false\"><mn>0<\/mn><\/mstyle><\/mtd><mtd><mstyle scriptlevel=\"0\" displaystyle=\"false\"><mtext>otherwise<\/mtext><\/mstyle><\/mtd><\/mtr><\/mtable><\/mrow><\/mrow><\/semantics><\/math><em>y<\/em>=<em>\u03d5<\/em>(<em>z<\/em>)={10\u200bif&nbsp;<em>z<\/em>\u22650otherwise\u200b<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Alternatively, for bipolar outputs:<math display=\"block\"><semantics><mrow><mi>y<\/mi><mo>=<\/mo><mrow><mo fence=\"true\">{<\/mo><mtable rowspacing=\"0.36em\" columnalign=\"left left\" columnspacing=\"1em\"><mtr><mtd><mstyle scriptlevel=\"0\" displaystyle=\"false\"><mrow><mo>+<\/mo><mn>1<\/mn><\/mrow><\/mstyle><\/mtd><mtd><mstyle scriptlevel=\"0\" displaystyle=\"false\"><mrow><mtext>if&nbsp;<\/mtext><mi>z<\/mi><mo>\u2265<\/mo><mn>0<\/mn><\/mrow><\/mstyle><\/mtd><\/mtr><mtr><mtd><mstyle scriptlevel=\"0\" displaystyle=\"false\"><mrow><mo>\u2212<\/mo><mn>1<\/mn><\/mrow><\/mstyle><\/mtd><mtd><mstyle scriptlevel=\"0\" displaystyle=\"false\"><mrow><mtext>if&nbsp;<\/mtext><mi>z<\/mi><mo>&lt;<\/mo><mn>0<\/mn><\/mrow><\/mstyle><\/mtd><\/mtr><\/mtable><\/mrow><\/mrow><\/semantics><\/math><em>y<\/em>={+1\u22121\u200bif&nbsp;<em>z<\/em>\u22650if&nbsp;<em>z<\/em>&lt;0\u200b<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Geometrically, the perceptron represents a&nbsp;<strong>linear decision boundary<\/strong>&nbsp;(a hyperplane). If you plot the input features in 2D space, the perceptron draws a straight line to separate Class A from Class B. The weights define the slope of this line, and the bias defines its offset from the origin.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">The Learning Rule: How the Perceptron Learns<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">The real magic of the perceptron is not its structure, but its learning algorithm. Unlike modern backpropagation (which came 30 years later), the perceptron learning rule is delightfully intuitive and local.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Here is the process for a single training iteration:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>Initialize:<\/strong>\u00a0Start with random weights (usually small random numbers) and a bias term set to zero.<\/li>\n\n\n\n<li><strong>Forward Pass:<\/strong>\u00a0Feed an input vector\u00a0<math><semantics><mrow><mi mathvariant=\"bold\">x<\/mi><\/mrow><\/semantics><\/math><strong>x<\/strong>\u00a0into the network. Compute the output\u00a0<math><semantics><mrow><msub><mi>y<\/mi><mrow><mi>p<\/mi><mi>r<\/mi><mi>e<\/mi><mi>d<\/mi><\/mrow><\/msub><\/mrow><\/semantics><\/math><em>y<\/em><em>p<\/em><em>re<\/em><em>d<\/em>\u200b.<\/li>\n\n\n\n<li><strong>Calculate Error:<\/strong>\u00a0Determine the difference between the predicted output\u00a0<math><semantics><mrow><msub><mi>y<\/mi><mrow><mi>p<\/mi><mi>r<\/mi><mi>e<\/mi><mi>d<\/mi><\/mrow><\/msub><\/mrow><\/semantics><\/math><em>y<\/em><em>p<\/em><em>re<\/em><em>d<\/em>\u200b\u00a0and the true label\u00a0<math><semantics><mrow><msub><mi>y<\/mi><mrow><mi>t<\/mi><mi>r<\/mi><mi>u<\/mi><mi>e<\/mi><\/mrow><\/msub><\/mrow><\/semantics><\/math><em>y<\/em><em>t<\/em><em>r<\/em><em>u<\/em><em>e<\/em>\u200b. The error\u00a0<math><semantics><mrow><mi>\u03b4<\/mi><mo>=<\/mo><msub><mi>y<\/mi><mrow><mi>t<\/mi><mi>r<\/mi><mi>u<\/mi><mi>e<\/mi><\/mrow><\/msub><mo>\u2212<\/mo><msub><mi>y<\/mi><mrow><mi>p<\/mi><mi>r<\/mi><mi>e<\/mi><mi>d<\/mi><\/mrow><\/msub><\/mrow><\/semantics><\/math><em>\u03b4<\/em>=<em>y<\/em><em>t<\/em><em>r<\/em><em>u<\/em><em>e<\/em>\u200b\u2212<em>y<\/em><em>p<\/em><em>re<\/em><em>d<\/em>\u200b. Note that\u00a0<math><semantics><mrow><mi>\u03b4<\/mi><\/mrow><\/semantics><\/math><em>\u03b4<\/em>\u00a0will be in the set {-2, 0, +2} for bipolar, or {-1, 0, +1} for binary.<\/li>\n\n\n\n<li><strong>Update Weights:<\/strong>\u00a0Adjust every weight and the bias using the following rule:<math display=\"block\"><semantics><mrow><msub><mi>w<\/mi><mi>i<\/mi><\/msub><mo stretchy=\"false\">(<\/mo><mi>n<\/mi><mi>e<\/mi><mi>w<\/mi><mo stretchy=\"false\">)<\/mo><mo>=<\/mo><msub><mi>w<\/mi><mi>i<\/mi><\/msub><mo stretchy=\"false\">(<\/mo><mi>o<\/mi><mi>l<\/mi><mi>d<\/mi><mo stretchy=\"false\">)<\/mo><mo>+<\/mo><mi>\u03b7<\/mi><mo>\u22c5<\/mo><mi>\u03b4<\/mi><mo>\u22c5<\/mo><msub><mi>x<\/mi><mi>i<\/mi><\/msub><\/mrow><\/semantics><\/math><em>w<\/em><em>i<\/em>\u200b(<em>n<\/em><em>e<\/em><em>w<\/em>)=<em>w<\/em><em>i<\/em>\u200b(<em>o<\/em><em>l<\/em><em>d<\/em>)+<em>\u03b7<\/em>\u22c5<em>\u03b4<\/em>\u22c5<em>x<\/em><em>i<\/em>\u200b<math display=\"block\"><semantics><mrow><mi>b<\/mi><mo stretchy=\"false\">(<\/mo><mi>n<\/mi><mi>e<\/mi><mi>w<\/mi><mo stretchy=\"false\">)<\/mo><mo>=<\/mo><mi>b<\/mi><mo stretchy=\"false\">(<\/mo><mi>o<\/mi><mi>l<\/mi><mi>d<\/mi><mo stretchy=\"false\">)<\/mo><mo>+<\/mo><mi>\u03b7<\/mi><mo>\u22c5<\/mo><mi>\u03b4<\/mi><\/mrow><\/semantics><\/math><em>b<\/em>(<em>n<\/em><em>e<\/em><em>w<\/em>)=<em>b<\/em>(<em>o<\/em><em>l<\/em><em>d<\/em>)+<em>\u03b7<\/em>\u22c5<em>\u03b4<\/em>Here,\u00a0<math><semantics><mrow><mi>\u03b7<\/mi><\/mrow><\/semantics><\/math><em>\u03b7<\/em>\u00a0(eta) is the\u00a0<strong>learning rate<\/strong>, a small positive constant (e.g., 0.1) that controls how drastically the weights change.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Intuition behind the update rule:<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>If the prediction is correct<\/strong>\u00a0(<math><semantics><mrow><mi>\u03b4<\/mi><mo>=<\/mo><mn>0<\/mn><\/mrow><\/semantics><\/math><em>\u03b4<\/em>=0): No change occurs.<\/li>\n\n\n\n<li><strong>If the prediction is too low<\/strong>\u00a0(should be 1, got 0):\u00a0<math><semantics><mrow><mi>\u03b4<\/mi><\/mrow><\/semantics><\/math><em>\u03b4<\/em>\u00a0is positive. The rule adds a fraction of the input to the weight. If\u00a0<math><semantics><mrow><msub><mi>x<\/mi><mi>i<\/mi><\/msub><\/mrow><\/semantics><\/math><em>x<\/em><em>i<\/em>\u200b\u00a0was positive, the weight increases (making it more likely to fire next time).<\/li>\n\n\n\n<li><strong>If the prediction is too high<\/strong>\u00a0(should be 0, got 1):\u00a0<math><semantics><mrow><mi>\u03b4<\/mi><\/mrow><\/semantics><\/math><em>\u03b4<\/em>\u00a0is negative. The rule subtracts a fraction of the input from the weight.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">This process is repeated epoch after epoch (each pass through the entire training dataset) until the perceptron makes no more mistakes\u2014or until a maximum number of iterations is reached.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">The XOR Problem: The Perceptron&#8217;s Achilles&#8217; Heel<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">In 1969, just as the AI spring was blooming, Marvin Minsky and Seymour Papert published the book&nbsp;<em>Perceptrons: An Introduction to Computational Geometry<\/em>. It was a devastating critique. They demonstrated mathematically that the single-layer perceptron was fundamentally incapable of solving the&nbsp;<strong>Exclusive OR (XOR) problem<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Let us recall the XOR truth table:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Input A<\/th><th class=\"has-text-align-left\" data-align=\"left\">Input B<\/th><th class=\"has-text-align-left\" data-align=\"left\">Output (A XOR B)<\/th><\/tr><\/thead><tbody><tr><td>0<\/td><td>0<\/td><td>0<\/td><\/tr><tr><td>0<\/td><td>1<\/td><td>1<\/td><\/tr><tr><td>1<\/td><td>0<\/td><td>1<\/td><\/tr><tr><td>1<\/td><td>1<\/td><td>0<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">If you plot these four points on a Cartesian plane, you will see that it is impossible to draw a single straight line that separates the 0s from the 1s. The 0s sit at (0,0) and (1,1); the 1s sit at (0,1) and (1,0). No linear boundary exists.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This was not a minor bug; it was a fatal flaw in the representational power of the single-layer perceptron. Minsky and Papert argued\u2014correctly, at the time\u2014that extending the perceptron to multiple layers (Multi-Layer Perceptrons, or MLPs) was computationally prohibitive because no learning algorithm existed for the hidden layers.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The result was catastrophic. The&nbsp;<strong>First AI Winter<\/strong>&nbsp;descended. Research funding for neural networks dried up for nearly a decade. Many researchers abandoned connectionism entirely, shifting their focus to symbolic AI and expert systems.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">The Geometric Reality: Linear Separability<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">The XOR problem is a specific instance of a broader constraint:&nbsp;<strong>Linear Separability<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A dataset is linearly separable if there exists a hyperplane that perfectly separates all samples of one class from all samples of another. The AND and OR logical functions are linearly separable. The XOR function is not.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For the perceptron to converge to a solution without errors, the training data&nbsp;<em>must<\/em>&nbsp;be linearly separable. The Perceptron Convergence Theorem (proved by Rosenblatt) states that if the data is linearly separable, the perceptron learning algorithm will find a separating hyperplane in a finite number of steps.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">However, if the data is not linearly separable (e.g., XOR, or real-world data with overlapping classes), the algorithm will never stop oscillating. It will continue adjusting weights forever, never reaching zero error.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Beyond the Single Layer: The Multi-Layer Perceptron (MLP)<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">The story of AI did not end in 1969. The way to solve XOR was to move beyond a single layer. A&nbsp;<strong>Multi-Layer Perceptron<\/strong>&nbsp;introduces one or more&nbsp;<strong>hidden layers<\/strong>&nbsp;between the input and the output.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">With one hidden layer, the network can model any continuous function (Universal Approximation Theorem). For XOR, a network with two hidden neurons can learn the appropriate non-linear boundaries.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">However, the MLP introduced a new problem: How do you train the weights in the hidden layers? The perceptron learning rule only works for the final output layer because you know the target label. For the hidden layers, you do not know what their output &#8220;should&#8221; have been.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This problem was solved in 1986 by David Rumelhart, Geoffrey Hinton, and Ronald Williams with the popularization of&nbsp;<strong>Backpropagation<\/strong>&nbsp;(though it was invented earlier by Paul Werbos). Backpropagation uses the chain rule from calculus to propagate the error gradient backwards through the network, adjusting the weights of the hidden layers.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Implementing a Perceptron from Scratch in Python<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">To truly appreciate the simplicity and power of the perceptron, one should implement it. Below is a modern, minimal implementation of the perceptron learning algorithm using NumPy.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">python<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">import numpy as np\n\nclass Perceptron:\n    \"\"\"\n    Perceptron classifier.\n\n    Parameters\n    ----------\n    eta : float, default=0.01\n        Learning rate (between 0.0 and 1.0)\n    n_iter : int, default=10\n        Passes over the training dataset.\n    random_state : int, default=42\n        Seed for random weight initialization.\n    \"\"\"\n    def __init__(self, eta=0.01, n_iter=10, random_state=42):\n        self.eta = eta\n        self.n_iter = n_iter\n        self.random_state = random_state\n\n    def fit(self, X, y):\n        \"\"\"Fit training data.\"\"\"\n        rgen = np.random.RandomState(self.random_state)\n        # Initialize weights from a normal distribution\n        self.w_ = rgen.normal(loc=0.0, scale=0.01, size=X.shape[1])\n        self.b_ = np.float_(0.)\n        self.errors_ = []  # Store number of misclassifications per epoch\n\n        for _ in range(self.n_iter):\n            errors = 0\n            for xi, target in zip(X, y):\n                # Calculate the update value (delta_w = eta * (target - prediction) * xi)\n                update = self.eta * (target - self.predict(xi))\n                self.w_ += update * xi\n                self.b_ += update\n                errors += int(update != 0.0)\n            self.errors_.append(errors)\n            # If no errors, we can stop early (data is linearly separable)\n            if errors == 0:\n                break\n        return self\n\n    def net_input(self, X):\n        \"\"\"Calculate the net input (z = dot(X, w) + b)\"\"\"\n        return np.dot(X, self.w_) + self.b_\n\n    def predict(self, X):\n        \"\"\"Return class label after unit step\"\"\"\n        # If net_input &gt;= 0, return 1, else return 0\n        return np.where(self.net_input(X) &gt;= 0.0, 1, 0)\n\n# Example usage with the AND logic gate\nif __name__ == \"__main__\":\n    # AND gate dataset\n    X = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])\n    y = np.array([0, 0, 0, 1])  # AND labels\n\n    perceptron = Perceptron(eta=0.1, n_iter=10)\n    perceptron.fit(X, y)\n\n    print(f\"Weights: {perceptron.w_}\")\n    print(f\"Bias: {perceptron.b_}\")\n    print(f\"Errors per epoch: {perceptron.errors_}\")\n\n    # Test prediction\n    test_input = np.array([[1, 1]])\n    print(f\"Prediction for [1,1]: {perceptron.predict(test_input)}\")<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Why this works for AND<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The AND problem is linearly separable. If you plot the points (0,0), (0,1), (1,0) as 0s and (1,1) as a 1, a straight line (like a line crossing through x=0.5, y=0.5) separates them perfectly. The perceptron will find this line.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you change the&nbsp;<code>y<\/code>&nbsp;labels to XOR&nbsp;<code>[0, 1, 1, 0]<\/code>&nbsp;and run the same code, the&nbsp;<code>errors_<\/code>&nbsp;list will never hit zero. The perceptron will run for all 10 iterations, still making mistakes, because no line exists.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The Modern Relevance of the Perceptron in 2025<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Why should a modern AI engineer care about a 1957 model incapable of solving XOR?<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1. Educational Pedestal<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The perceptron remains the &#8220;Hello World&#8221; of neural networks. It provides the cleanest possible introduction to concepts that scale to GPT-4: weights, bias, activation functions, forward passes, loss functions, and iterative optimization.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2. Online Learning and Real-Time Systems<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Modern deep learning typically uses batch gradient descent, requiring large datasets stored in memory. The perceptron, however, is an&nbsp;<strong>online learning<\/strong>&nbsp;algorithm. It updates weights after every single sample. This makes it exceptionally useful for:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Spam filters<\/strong>\u00a0that need to adapt to new tactics instantly.<\/li>\n\n\n\n<li><strong>Click-through rate prediction<\/strong>\u00a0in ad tech, where data arrives as a stream.<\/li>\n\n\n\n<li><strong>Low-power edge devices<\/strong>\u00a0(tiny microcontrollers) that lack the RAM for storing large batches.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">3. The Voted Perceptron<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Modern improvements, such as the &#8220;Voted Perceptron&#8221; (Freund and Schapire, 1999), retain the perceptron&#8217;s speed while mitigating its linear separability requirement. Instead of keeping just the final weight vector, the Voted Perceptron stores every weight vector after each epoch and creates an ensemble vote. This allows it to handle noisy, non-separable data far better than the original.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">4. The Conceptual Bridge to Support Vector Machines (SVMs)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The perceptron aims to find&nbsp;<em>any<\/em>&nbsp;separating hyperplane. The SVM, invented by Vapnik and Chervonenkis, asks: &#8220;What if we find the&nbsp;<em>optimal<\/em>&nbsp;separating hyperplane\u2014the one with the maximum margin?&#8221; The perceptron paved the conceptual road for SVMs, which dominated classification tasks in the 1990s and early 2000s before deep learning took over.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">5. Neuroscience Compatibility<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">While deep networks require backpropagation (which neuroscientists debate whether the brain actually performs), the perceptron learning rule is&nbsp;<strong>Hebbian<\/strong>&nbsp;(&#8220;Neurons that fire together, wire together&#8221;). The local, weight-update rule of the perceptron is biologically plausible. For neuromorphic computing and brain-inspired hardware, the perceptron remains a relevant architectural unit.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Limitations and Warnings for Practitioners<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Despite its elegance, the perceptron has sharp limitations that every engineer must respect:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>Only Binary Classification:<\/strong>\u00a0It cannot output probabilities (like logistic regression) or handle multiple classes natively (requires One-vs-All strategies).<\/li>\n\n\n\n<li><strong>Cannot Learn Noisy Data:<\/strong>\u00a0Real-world data is rarely linearly separable. If your dataset has overlapping classes (e.g., medical test results where healthy and sick patients have similar biomarker ranges), the perceptron will fail to converge.<\/li>\n\n\n\n<li><strong>Sensitivity to Scaling:<\/strong>\u00a0The perceptron is sensitive to the scale of input features. If one feature ranges from 0 to 1 and another from 0 to 1000, the larger feature will dominate the weighted sum. Feature scaling (standardization or normalization) is mandatory.<\/li>\n\n\n\n<li><strong>No Probability Estimates:<\/strong>\u00a0Unlike logistic regression, which uses the sigmoid function to output a probability (e.g., &#8220;There is an 85% chance this is a cat&#8221;), the perceptron outputs a hard binary 0\/1. You cannot get confidence scores directly.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udcdc The Original Publications (Historical Foundations)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">To understand the perceptron&#8217;s origins, these primary sources are essential. They contain the original formulations and hardware descriptions from Frank Rosenblatt himself.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>The Birth of the Perceptron<\/strong>:\u00a0<em>The Perceptron: A Perceiving and Recognizing Automaton (Project PARA)<\/em><a href=\"https:\/\/www.biblio.com\/book\/perceptron-perceiving-recognizing-automaton-project-para\/d\/308182718\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a><a href=\"https:\/\/classes.soe.ucsc.edu\/nlp202\/Winter22\/slides\/perceptron.pdf#2#1\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a><a href=\"https:\/\/websites.umass.edu\/brain-wars\/1957-the-birth-of-cognitive-science\/the-perceptron-a-perceiving-and-recognizing-automaton\/\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a>\n<ul class=\"wp-block-list\">\n<li><strong>Author<\/strong>: Frank Rosenblatt<\/li>\n\n\n\n<li><strong>Date<\/strong>: January 1957<\/li>\n\n\n\n<li><strong>Significance<\/strong>: This is the original Cornell Aeronautical Laboratory report where Rosenblatt first introduced the perceptron. It describes the hardware (the Mark I Perceptron with photocells) and the initial learning algorithm, predating his more famous journal article by nearly two years\u00a0<a href=\"https:\/\/www.biblio.com\/book\/perceptron-perceiving-recognizing-automaton-project-para\/d\/308182718\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a>.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>The Psychological Review Paper<\/strong>:\u00a0<em>The Perceptron: A Probabilistic Model for Information Storage and Organization in the Brain<\/em><a href=\"https:\/\/classes.soe.ucsc.edu\/nlp202\/Winter22\/slides\/perceptron.pdf#2#1\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a>\n<ul class=\"wp-block-list\">\n<li><strong>Author<\/strong>: Frank Rosenblatt<\/li>\n\n\n\n<li><strong>Date<\/strong>: 1958<\/li>\n\n\n\n<li><strong>Significance<\/strong>: This is the widely cited journal article that brought the perceptron to the broader scientific community. It frames the perceptron within a biological context, comparing its operation to information storage in the brain\u00a0<a href=\"https:\/\/classes.soe.ucsc.edu\/nlp202\/Winter22\/slides\/perceptron.pdf#2#1\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a>.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udcd6 The Definitive Critique (The &#8220;AI Winter&#8221; Book)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">This work is just as important as the original invention, as it rigorously defined the perceptron&#8217;s limitations and significantly shaped the direction of AI research.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>The Book That Changed Everything<\/strong>:\u00a0<em>Perceptrons: An Introduction to Computational Geometry<\/em><a href=\"https:\/\/science-catalogue.canada.ca\/record=1094761~S6\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a><a href=\"https:\/\/libcat.aub.edu.lb\/search~S2?\/cCA\/c\/647%2C-1%2C0%2CB\/frameset&amp;FF=c001.53%3Am666p%3Ac.1&amp;1%2C1%2C\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a>\n<ul class=\"wp-block-list\">\n<li><strong>Authors<\/strong>: Marvin Minsky and Seymour Papert<\/li>\n\n\n\n<li><strong>Date<\/strong>: 1969<\/li>\n\n\n\n<li><strong>Significance<\/strong>: This is the seminal critique that mathematically proved the single-layer perceptron&#8217;s fundamental limitation: its inability to solve problems like XOR that are not linearly separable\u00a0<a href=\"https:\/\/science-catalogue.canada.ca\/record=1094761~S6\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a>. The book&#8217;s arguments led to a reduction in neural network research funding and ushered in the first &#8220;AI Winter.&#8221; Its bibliography (pages 247-253) is also an excellent resource for earlier foundational work\u00a0<a href=\"https:\/\/libcat.aub.edu.lb\/search~S2?\/cCA\/c\/647%2C-1%2C0%2CB\/frameset&amp;FF=c001.53%3Am666p%3Ac.1&amp;1%2C1%2C\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a>.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udcca The Convergence Theorem (The Mathematical Proof)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">This theorem provides the formal guarantee that the perceptron learning rule will work, provided the data meets a specific condition.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>The Proof of Convergence<\/strong>: On the Convergence of the Perceptron Algorithm\n<ul class=\"wp-block-list\">\n<li><strong>Author<\/strong>: Albert B. J. Novikoff<\/li>\n\n\n\n<li><strong>Date<\/strong>: 1962<\/li>\n\n\n\n<li><strong>Key Concept<\/strong>: Novikoff formalized the\u00a0<strong>Perceptron Convergence Theorem<\/strong>, proving that if a dataset is\u00a0<strong>linearly separable<\/strong>, the perceptron algorithm will find a solution in a finite number of steps\u00a0<a href=\"https:\/\/web.engr.oregonstate.edu\/~huanlian\/teaching\/ML\/2025fall\/unit2\/convergence.html\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a>. The proof involves establishing both a lower bound (the algorithm makes progress) and an upper bound (the solution can&#8217;t be infinitely far away) on the weight vector&#8217;s length\u00a0<a href=\"https:\/\/www.cs.ubbcluj.ro\/~csatol\/kozgaz_mestint\/4_neuronhalo\/PerceptConvProof.pdf#1#1\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a><a href=\"https:\/\/web.engr.oregonstate.edu\/~huanlian\/teaching\/ML\/2025fall\/unit2\/convergence.html\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a>. This theorem remains a cornerstone of machine learning theory.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\ude80 Modern Advances (Overcoming Limitations)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">These papers address the perceptron&#8217;s original weaknesses and extend its capabilities for modern applications.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Multi-Layer Networks &amp; Backpropagation<\/strong>:\u00a0<em>Learning Representations by Back-propagating Errors<\/em><a href=\"http:\/\/www.bcp.psych.ualberta.ca\/%7Emike\/Pearl_Street\/Dictionary\/contents\/B\/backprop.html\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a>\n<ul class=\"wp-block-list\">\n<li><strong>Authors<\/strong>: David E. Rumelhart, Geoffrey E. Hinton, Ronald J. Williams<\/li>\n\n\n\n<li><strong>Date<\/strong>: 1986<\/li>\n\n\n\n<li><strong>Significance<\/strong>: This paper revitalized neural network research by popularizing the\u00a0<strong>backpropagation algorithm<\/strong>\u00a0for training multi-layer perceptrons (MLPs). By solving the credit assignment problem for hidden layers, it enabled networks to learn non-linear functions like XOR, overcoming the limitation identified by Minsky and Papert\u00a0<a href=\"http:\/\/www.bcp.psych.ualberta.ca\/%7Emike\/Pearl_Street\/Dictionary\/contents\/B\/backprop.html\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a>. This work is the direct ancestor of modern deep learning.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>The Voted Perceptron (for Non-Separable Data)<\/strong>:\u00a0<em>Large Margin Classification Using the Perceptron Algorithm<\/em><a href=\"https:\/\/pypi.org\/project\/votedperceptron\/1.0.0\/\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a><a href=\"http:\/\/curtis.ml.cmu.edu\/w\/courses\/index.php?direction=prev&amp;oldid=18188&amp;title=10-601B_Perceptrons_and_Large_Margin\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a>\n<ul class=\"wp-block-list\">\n<li><strong>Authors<\/strong>: Yoav Freund and Robert E. Schapire<\/li>\n\n\n\n<li><strong>Date<\/strong>: 1999<\/li>\n\n\n\n<li><strong>Significance<\/strong>: This paper introduces the\u00a0<strong>Voted Perceptron<\/strong>, an extension of the original algorithm designed to handle noisy data that is not perfectly linearly separable\u00a0<a href=\"https:\/\/pypi.org\/project\/votedperceptron\/1.0.0\/\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a><a href=\"http:\/\/curtis.ml.cmu.edu\/w\/courses\/index.php?direction=prev&amp;oldid=18188&amp;title=10-601B_Perceptrons_and_Large_Margin\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a>. Instead of keeping a single final weight vector, it stores multiple &#8220;surviving&#8221; weight vectors from the training process and uses a weighted vote for prediction. This approach is more robust and provides performance comparable to more complex algorithms like Support Vector Machines\u00a0<a href=\"http:\/\/curtis.ml.cmu.edu\/w\/courses\/index.php?direction=prev&amp;oldid=18188&amp;title=10-601B_Perceptrons_and_Large_Margin\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a>.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83e\udded How to Navigate These Sources<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">If you are looking for a structured path through this material:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>For Historical and Conceptual Understanding<\/strong>: Start with Rosenblatt&#8217;s 1958\u00a0<em>Psychological Review<\/em>\u00a0paper\u00a0<a href=\"https:\/\/classes.soe.ucsc.edu\/nlp202\/Winter22\/slides\/perceptron.pdf#2#1\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a>\u00a0for the core idea, then read Minsky and Papert&#8217;s 1969\u00a0<em>Perceptrons<\/em>\u00a0<a href=\"https:\/\/science-catalogue.canada.ca\/record=1094761~S6\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a>\u00a0to understand the critical limitations.<\/li>\n\n\n\n<li><strong>For Theoretical Rigor<\/strong>: Study Novikoff&#8217;s Convergence Theorem (often covered in university course notes)\u00a0<a href=\"https:\/\/web.engr.oregonstate.edu\/~huanlian\/teaching\/ML\/2025fall\/unit2\/convergence.html\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a>. The formal proof is a key exercise in understanding machine learning&#8217;s theoretical guarantees.<\/li>\n\n\n\n<li><strong>For Modern Application<\/strong>: Read Rumelhart, Hinton, and Williams (1986) on backpropagation\u00a0<a href=\"http:\/\/www.bcp.psych.ualberta.ca\/%7Emike\/Pearl_Street\/Dictionary\/contents\/B\/backprop.html\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a>\u00a0to see how the field moved beyond single-layer perceptrons, then explore Freund and Schapire (1999) for the Voted Perceptron algorithm\u00a0<a href=\"https:\/\/pypi.org\/project\/votedperceptron\/1.0.0\/\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a>, which is widely used in online and structured prediction tasks.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\ud83c\udfaf Best Specific Videos<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>1. Single-Layer Perceptron: Background &amp; Python Code<\/strong> This video introduces the Single-Layer Perceptron \u2014 the most fundamental element of nearly all modern neural networks \u2014 with both theory and Python code. \ud83d\udd17 <a href=\"https:\/\/www.youtube.com\/watch?v=OVHc-7GYRo4\">https:\/\/www.youtube.com\/watch?v=OVHc-7GYRo4<\/a> <a href=\"https:\/\/www.youtube.com\/watch?v=OVHc-7GYRo4\" target=\"_blank\" rel=\"noreferrer noopener\">YouTube<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>2. Perceptron Algorithm \u2013 StatQuest \/ ML Intro<\/strong> A clear, beginner-friendly intro to the perceptron algorithm in machine learning. \ud83d\udd17 <a href=\"https:\/\/www.youtube.com\/watch?v=4Gac5I64LM4\">https:\/\/www.youtube.com\/watch?v=4Gac5I64LM4<\/a> <a href=\"https:\/\/www.youtube.com\/watch?v=4Gac5I64LM4\" target=\"_blank\" rel=\"noreferrer noopener\">YouTube<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>3. Krish Naik \u2013 Perceptron Implementation in Python (7-Part Series)<\/strong> A comprehensive tutorial covering perceptron implementation from scratch in Python across 7 parts \u2014 goes from basic setup to complete implementation with code samples. Search on YouTube: <em>&#8220;Krish Naik Perceptron Implementation Python from scratch&#8221;<\/em> \ud83d\udd17 Channel: <a href=\"https:\/\/www.youtube.com\/@krishnaik06\">https:\/\/www.youtube.com\/@krishnaik06<\/a> <a href=\"https:\/\/www.classcentral.com\/course\/youtube-complete-implementation-of-perceptron-in-deep-learning-using-python-from-scratch-120965\" target=\"_blank\" rel=\"noreferrer noopener\">Class Central<\/a><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h4 class=\"wp-block-heading\">\ud83c\udfc6 Best Channels for Deep Understanding<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>4. 3Blue1Brown \u2013 Neural Networks Series<\/strong> His four-part neural network series begins with &#8220;What is a neural network?&#8221; and builds up through backpropagation and gradient descent \u2014 a masterpiece of visual education that makes complex math crystal clear. \ud83d\udd17 <a href=\"https:\/\/www.youtube.com\/c\/3blue1brown\">https:\/\/www.youtube.com\/c\/3blue1brown<\/a> <a href=\"https:\/\/www.historytools.org\/ai\/the-best-neural-network-and-deep-learning-videos-on-youtube-an-experts-guide-for-2024\" target=\"_blank\" rel=\"noreferrer noopener\">History Tools<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>5. Sentdex \u2013 Neural Networks from Scratch<\/strong> This 3.5-hour series builds a neural network from scratch in Python, starting from individual neurons and progressing to full layers, activation functions, and loss calculation. \ud83d\udd17 <a href=\"https:\/\/www.youtube.com\/user\/sentdex\">https:\/\/www.youtube.com\/user\/sentdex<\/a> <a href=\"https:\/\/www.classcentral.com\/course\/youtube-neural-networks-from-scratch-in-python-45693\" target=\"_blank\" rel=\"noreferrer noopener\">Class Central<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The perceptron is a paradox. It is mathematically weak, incapable of solving simple logic puzzles like XOR, and prone to infinite loops on real-world data. Yet, it is also the single most important historical artifact in connectionist AI.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It proved that a machine could learn from data by adjusting its internal parameters, rather than being explicitly programmed. It established the fundamental vocabulary of modern AI: weights, biases, activation functions, and learning rates. And importantly, its failure\u2014the AI Winter caused by Minsky and Papert\u2019s critique\u2014taught a generation of researchers the crucial lesson that representation matters as much as learning. You cannot learn what you cannot represent.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">As we marvel at Large Language Models in 2025, we should remember that nestled inside every transformer and every diffusion model are millions of neurons operating on the same core principle as Rosenblatt\u2019s Mark I Perceptron: collect inputs, multiply by weights, sum them up, add a bias, and activate. The rest is just engineering, scale, and a lot of data.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The perceptron was the first spark. For that, it deserves its place in the pantheon of AI history.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The Perceptron: The Foundation Stone of Neural Networks and Modern AI Introduction In the sprawling, complex landscape of artificial intelligence, certain ideas stand as monumental pillars. The Transformer architecture might dominate today\u2019s chatbots, and Convolutional Neural Networks might power facial recognition, but all of modern deep learning traces its lineage back to a single, deceptively [&hellip;]<\/p>\n","protected":false},"author":73,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-3511","post","type-post","status-publish","format-standard","hentry","category-support"],"_links":{"self":[{"href":"https:\/\/www.mhtechin.com\/support\/wp-json\/wp\/v2\/posts\/3511","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mhtechin.com\/support\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.mhtechin.com\/support\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.mhtechin.com\/support\/wp-json\/wp\/v2\/users\/73"}],"replies":[{"embeddable":true,"href":"https:\/\/www.mhtechin.com\/support\/wp-json\/wp\/v2\/comments?post=3511"}],"version-history":[{"count":1,"href":"https:\/\/www.mhtechin.com\/support\/wp-json\/wp\/v2\/posts\/3511\/revisions"}],"predecessor-version":[{"id":3513,"href":"https:\/\/www.mhtechin.com\/support\/wp-json\/wp\/v2\/posts\/3511\/revisions\/3513"}],"wp:attachment":[{"href":"https:\/\/www.mhtechin.com\/support\/wp-json\/wp\/v2\/media?parent=3511"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mhtechin.com\/support\/wp-json\/wp\/v2\/categories?post=3511"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mhtechin.com\/support\/wp-json\/wp\/v2\/tags?post=3511"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}