Files
AI4DigitalForensics/lectures/06_universal_approximation_theorem/neuron.ipynb
2025-05-01 19:03:03 -04:00

251 lines
46 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"cells": [
{
"cell_type": "code",
"execution_count": 10,
"id": "d981a7e2",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'\\ndigraph Artificial_Neuron {\\n graph [rankdir=LR]\\n x [label=\"x\", shape=circle, style=filled, fillcolor=lightblue]\\n sum [label=\"Σ\\n(wx + b)\", shape=circle, style=filled, fillcolor=lightgreen]\\n act [label=\"σ\\n(sigmoid)\", shape=circle, style=filled, fillcolor=lightyellow]\\n y [label=\"y\\n(output)\", shape=circle, style=filled, fillcolor=lightcoral]\\n x -> sum [label=\"w\"]\\n sum -> act\\n act -> y\\n}\\n'"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"\"\"\"\n",
"digraph Artificial_Neuron {\n",
" graph [rankdir=LR]\n",
" x [label=\"x\", shape=circle, style=filled, fillcolor=lightblue]\n",
" sum [label=\"Σ\\n(wx + b)\", shape=circle, style=filled, fillcolor=lightgreen]\n",
" act [label=\"σ\\n(sigmoid)\", shape=circle, style=filled, fillcolor=lightyellow]\n",
" y [label=\"y\\n(output)\", shape=circle, style=filled, fillcolor=lightcoral]\n",
" x -> sum [label=\"w\"]\n",
" sum -> act\n",
" act -> y\n",
"}\n",
"\"\"\""
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "efc791a9",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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m2++weeff44///xTr/dQu337Nn777Tds374dFy9ehEqlQpcuXfDs2TP8+eefCA8Px7///ouAgACt7e7cuYOdO3fi999/x++//44///wTs2fPzvV9Nm3ahGrVqqFTp045ln377bd4+vQpwsPD9ap50aJFaNy4MQYOHIjHjx/j8ePH8PLy0iwfNWoUvv/+e5w6dQolS5ZEly5doFQq9dr3yJEj0bNnT7Rv316z7yZNmui1LRERkbFIetOE5ORk1KtXD/3798fHH3/81vXv3r2Ljh07YvDgwQgLC0NERAQGDBiA0qVLo127dgVQsXmysrLCunXrMHDgQKxcuRLvvPMOWrRogV69esHHx0fnNps2bYJCocCqVatgZ2eHWrVq4eHDhxg4cGCOdadPn46mTZsCAL744guEhobizp07qFSpEgCxi8PRo0cBiG26YsUKrFu3TtM/d9WqVQgPD8fq1asxatSoHPtftGgR2rdvj9GjRwMAqlWrhuPHj+PAgQN6/fyzZs2Cj48PoqKi4O/vr7UsPT0dM2fOxOHDh9G4cWMAQKVKlXD06FH8+OOPaNGihV7vAYhdCzZs2AB3d3cAQHh4OC5fvoy7d+9qAuKGDRtQu3ZtnDlzBu+++y4A8czwunXr4OTkBADo06cPIiIiMGPGDJ3vc/PmTdSsWVPnMvX8mzdv6lWzi4sLbGxs4ODgAE9PzxzLJ0+ejDZt2kClUmHFihWoXbs2duzYgZ49e751346OjrC3t0d6errOfRMRERUEScNshw4dDLogaeXKlahYsSK+//57AOI/7EePHsWCBQtMFmYdHICXL02ya73eW1/du3dHx44dERUVhZMnT2L//v2YO3cufv75Z50XQ924cQM+Pj5ad2Ty9fXVue/sgdjDwwMODg6aIKued/LkSQDiWUilUqkJvwBgbW0NX19fXLt2Tef+r127hm7dumnNa9y4sd5htlatWujbty/Gjh2b4wKp27dvIyUlBW3atNGan5GRgQYNGui1f7UKFSpogqy6bi8vL60znbVq1YKrqyuuXbumCbPe3t6aIAsApUuXxpMnT974XoK+fUzySR3wAaB48eKoXr16ru1ERERvJghAVhagUonP6of6ta7n3B6CoPt19vmCkLeHutbXp7O/1vUMAG3bin89Nieyup3tiRMn0Lp1a6157dq1e+OV2unp6Vp/ek9M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",
"text/plain": [
"<Figure size 800x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"\n",
"# Define the sigmoid activation function\n",
"def sigmoid(z):\n",
" return 1 / (1 + np.exp(-z))\n",
"\n",
"# Neuron parameters\n",
"weight = 2.0 # Weight for the input\n",
"bias = -1.0 # Bias term\n",
"\n",
"# Input range for plotting\n",
"x = np.linspace(-5, 5, 100) # 100 points from -5 to 5\n",
"z = weight * x + bias # Weighted sum: z = w*x + b\n",
"output = sigmoid(z) # Apply sigmoid activation\n",
"\n",
"# Create the plot\n",
"plt.figure(figsize=(8, 6))\n",
"plt.plot(x, output, label='Sigmoid Neuron Output', color='blue')\n",
"plt.title('Artificial Neuron with Sigmoid Activation')\n",
"plt.xlabel('Input (x)')\n",
"plt.ylabel('Output (σ(w*x + b))')\n",
"plt.grid(True)\n",
"plt.legend()\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "ab49be7f",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "e02bcc09ab8a460d9aa3da96d65e8661",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"interactive(children=(FloatSlider(value=20.0, description='w', max=200.0, min=-50.0), FloatSlider(value=-7.0, …"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"<function __main__.plot_neuron(w=20.0, b=-7.0)>"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"from ipywidgets import interact\n",
"import ipywidgets as widgets\n",
"\n",
"# Sigmoid function\n",
"def sigmoid(z):\n",
" return 1 / (1 + np.exp(-z))\n",
"\n",
"# Function to plot the neuron and sigmoid curve\n",
"def plot_neuron(w=20.0, b=-7.0):\n",
" # Create a figure with two subplots\n",
" fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 4), gridspec_kw={'width_ratios': [1, 2]})\n",
"\n",
" # Subplot 1: Neuron diagram\n",
" ax1.set_xlim(-0.5, 2.5)\n",
" ax1.set_ylim(-0.5, 0.5)\n",
" ax1.axis('off')\n",
"\n",
" # Draw circles (input and summation nodes)\n",
" circle1 = plt.Circle((0, 0), 0.3, fill=False)\n",
" circle2 = plt.Circle((2, 0), 0.3, fill=False)\n",
" ax1.add_patch(circle1)\n",
" ax1.add_patch(circle2)\n",
"\n",
" # Draw arrow connecting circles\n",
" ax1.arrow(0.3, 0, 1.4, 0, head_width=0.05, head_length=0.1, fc='k', ec='k')\n",
"\n",
" # Labels\n",
" ax1.text(0, 0, 'x', ha='center', va='center', fontsize=12)\n",
" ax1.text(2, 0, 'Σ', ha='center', va='center', fontsize=12)\n",
" ax1.text(1, 0.2, f'w = {w}', ha='center', va='center', fontsize=12)\n",
" ax1.text(1, -0.4, f'b = {b}', ha='center', va='center', fontsize=12)\n",
"\n",
" # Subplot 2: Sigmoid plot\n",
" x = np.linspace(-1, 1, 100) # Input range from -1 to 1\n",
" z = w * x + b\n",
" y = sigmoid(z)\n",
"\n",
" ax2.plot(x, y, 'r-', label='Sigmoid Output')\n",
" ax2.set_xlim(-1, 1)\n",
" ax2.set_ylim(-0.05, 1.05)\n",
" ax2.set_xlabel('x')\n",
" ax2.set_ylabel('y')\n",
" ax2.grid(True)\n",
" ax2.legend()\n",
"\n",
" plt.tight_layout()\n",
" plt.show()\n",
"\n",
"# Create interactive sliders for w and b\n",
"interact(plot_neuron,\n",
" w=widgets.FloatSlider(min=-50, max=200, step=0.1, value=20.0, description='w'),\n",
" b=widgets.FloatSlider(min=-50, max=200, step=0.1, value=-7.0, description='b'))"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "e4d5516d",
"metadata": {},
"outputs": [],
"source": [
"\"\"\"\n",
"digraph Neural_Network { // Graph settings rankdir=LR\n",
"// Input node\n",
"X [label=\"X\", shape=circle, style=filled, fillcolor=lightpink]\n",
"\n",
"// Hidden layer neurons\n",
"H1 [label=\"R(-5x - 7)\", shape=rectangle, style=filled, fillcolor=lightgreen]\n",
"H2 [label=\"R(-1.2x - 1.3)\", shape=rectangle, style=filled, fillcolor=lightgreen]\n",
"H3 [label=\"R(1.2x + 1)\", shape=rectangle, style=filled, fillcolor=lightgreen]\n",
"H4 [label=\"R(1.2x - 2)\", shape=rectangle, style=filled, fillcolor=lightgreen]\n",
"H5 [label=\"R(2x - 1.1)\", shape=rectangle, style=filled, fillcolor=lightgreen]\n",
"H6 [label=\"R(5x - 5)\", shape=rectangle, style=filled, fillcolor=lightgreen]\n",
"\n",
"// Output node\n",
"Y [label=\"Y\", shape=circle, style=filled, fillcolor=yellow]\n",
"\n",
"// Edges from input to hidden layer\n",
"X -> H1\n",
"X -> H2\n",
"X -> H3\n",
"X -> H4\n",
"X -> H5\n",
"X -> H6\n",
"\n",
"// Edges from hidden layer to output\n",
"H1 -> Y\n",
"H2 -> Y\n",
"H3 -> Y\n",
"H4 -> Y\n",
"H5 -> Y\n",
"H6 -> Y\n",
"\n",
"// Group hidden neurons in the same rank for vertical alignment\n",
"{rank=same; H1; H2; H3; H4; H5; H6}\n",
"}\n",
"\n",
"\"\"\""
]
},
{
"cell_type": "markdown",
"id": "f7d762c0",
"metadata": {},
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"id": "488d0e22",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.13.2"
}
},
"nbformat": 4,
"nbformat_minor": 5
}