CONTENTS

എൻട്രോപ്പി: അടിസ്ഥാന തത്വങ്ങളിൽ നിന്ന്

എൻട്രോപ്പി എന്ന ആശയം എനിക്ക് അത്യന്തം ആകർഷകമായി തോന്നുന്നു. എന്നാൽ, എന്ന സൂത്രവാക്യത്തെ, പ്രിഫിക്സ് ഫ്രീ കോഡുകൾ, വിവരശേഖരണം തുടങ്ങിയ “അന്തർബോധപരമായ” വിശദീകരണങ്ങളുമായി ബന്ധിപ്പിക്കുന്നത് തീർച്ചയായും സ്പഷ്ടമല്ല. ഇവിടെ, ഈ ആശയത്തിലേക്ക് സ്വതന്ത്രമായി എത്തിച്ചേരാനുള്ള രണ്ട് വഴികൾ ഞാൻ പരിശോധിക്കാൻ ആഗ്രഹിക്കുന്നു.

വിവരത്തിന്റെ സവിശേഷതകൾ

നമുക്ക് ഒരു ഫംഗ്ഷൻ നിർവചിക്കണമെന്ന് കരുതുക, അത് ഒരു സംഭവത്തിന്റെ വിവരശേഷി പ്രതിനിധീകരിക്കുന്നു. സംഭവത്തിന്റെ പ്രത്യേക വിശദാംശങ്ങൾ മാറ്റിനിർത്തി, ഒരു സംഭവത്തെ മറ്റൊന്നുമായി താരതമ്യം ചെയ്യാൻ നമുക്ക് ഉപയോഗിക്കാവുന്ന ഒരു അളവ് അതിന്റെ സംഭാവ്യതയാണ്. അതിനാൽ, ഒരു പ്രോബബിലിറ്റി ൽ നിന്ന് ലേക്കുള്ള ഒരു മാപ്പിംഗ് ആകാം. ഈ ചട്ടക്കൂട് കണക്കിലെടുക്കുമ്പോൾ, ഇനിപ്പറയുന്ന ആവശ്യകതകൾ സാമാന്യബുദ്ധിക്ക് അനുയോജ്യമാണ്:

  1. . ഒരു സംഭവം തീർച്ചയായും സംഭവിക്കുകയാണെങ്കിൽ, അത് വളരെ രസകരമല്ല, നമുക്ക് വളരെ കുറച്ച് വിവരമേ നൽകൂ.

  2. തുടർച്ചയായതും എന്ന ഇടവേളയിൽ ഏകതാനമായി കുറയുന്നതുമായിരിക്കണം. കൂടുതൽ സാധാരണമായ ഒരു സംഭവം കുറച്ച് വിവരം നൽകുന്നു.

  3. , എന്നീ സംഭാവ്യതകളുള്ള രണ്ട് സ്വതന്ത്ര സംഭവങ്ങൾക്ക് വിവരശേഷി ഉണ്ടായിരിക്കണം.

അവസാനത്തെ ആവശ്യകതയാണ് ഏറ്റവും പ്രധാനമായത്. നിർവചനം അനുസരിച്ച്, രണ്ട് സ്വതന്ത്ര സംഭവങ്ങൾ സംഭവിക്കാനുള്ള സംഭാവ്യത ആണ്. അതിനാൽ

ഫംഗ്ഷൻ തുടർച്ചയായതായിരിക്കണമെന്നതിനാൽ, ഇത് ഇനിപ്പറയുന്നവയ്ക്ക് മാത്രമേ നിലനിൽക്കൂ:

ഏകതാനമായി കുറയുന്നതായിരിക്കണമെങ്കിൽ,

നെഗറ്റീവ് ആയിരിക്കണം. പോസിറ്റീവ് ആയതിനാൽ, നെഗറ്റീവ് ആയിരിക്കണം. എന്ന് കൊടുക്കുക

ആയതിനാൽ, ഡിനോമിനേറ്റർ ഒരു സ്ഥിരാങ്കമായതിനാൽ, നെ ലോഗരിതത്തിന്റെ അടിസ്ഥാനം എൻകോഡ് ചെയ്യുന്നതായി കണക്കാക്കാം. സൗകര്യത്തിനായി, 1 ആയി കൊടുക്കുകയും എന്നത് അടിസ്ഥാന-2 ലോഗരിതം സൂചിപ്പിക്കുകയും ചെയ്യുന്നു.

എൻട്രോപ്പി എന്നത് ഒരു വിതരണം എന്നതിന് മുകളിലുള്ള യുടെ പ്രതീക്ഷിത മൂല്യം മാത്രമാണ്

തുടർച്ചയുടെ പ്രചോദനത്തോടെ എന്നും നമ്മൾ അനുമാനിക്കുന്നു.

ഉദാഹരണത്തിന്, ബെർണൂലി റാൻഡം വേരിയബിൾ പരിഗണിക്കുക, അത് സംഭാവ്യതയോടെ എന്ന മൂല്യവും സംഭാവ്യതയോടെ എന്ന മൂല്യവും എടുക്കുന്നു. അതിന്റെ എൻട്രോപ്പി പ്ലോട്ട് ചെയ്താൽ

Loading...
Loading...
പ്ലോട്ടിംഗ് കോഡ്
from pathlib import Path

import numpy as np
import plotly.graph_objects as go

# Function to calculate the entropy of a Bernoulli variable
def bernoulli_entropy(p):
    return -p * np.log2(p) - (1 - p) * np.log2(1 - p)

# Generate values for p from 0 to 1
p_values = np.linspace(0.01, 0.99, 100)
entropy_values = bernoulli_entropy(p_values)

# Shared trace for both themes
trace = go.Scatter(
    x=p_values,
    y=entropy_values,
    mode="lines",
    name="Entropy",
    line=dict(color="red"),
)

# Output directory (repo root/static)
output_dir = Path(__file__).resolve().parents[3] / "static"
output_dir.mkdir(parents=True, exist_ok=True)

themes = [
    {
        "template": "plotly_white",
        "font_color": "#111111",
        "axis": {
            "linecolor": "#111111",
            "tickcolor": "#111111",
            "tickfont": {"color": "#111111"},
            "title_font": {"color": "#111111"},
            "showgrid": True,
            "gridcolor": "rgba(17, 17, 17, 0.2)",
            "gridwidth": 1,
            "zeroline": False,
        },
        "filename": "bernoulli_entropy_plot_light.html",
    },
    {
        "template": "plotly_dark",
        "font_color": "#f5f5f5",
        "axis": {
            "linecolor": "#f5f5f5",
            "tickcolor": "#f5f5f5",
            "tickfont": {"color": "#f5f5f5"},
            "title_font": {"color": "#f5f5f5"},
            "showgrid": True,
            "gridcolor": "rgba(245, 245, 245, 0.2)",
            "gridwidth": 1,
            "zeroline": False,
        },
        "filename": "bernoulli_entropy_plot_dark.html",
    },
]

for theme in themes:
    fig = go.Figure(data=[trace])
    fig.update_layout(
        title="Entropy of a Bernoulli Random Variable",
        xaxis_title="p",
        yaxis_title="Entropy",
        template=theme["template"],
        font=dict(color=theme["font_color"]),
        paper_bgcolor="rgba(0, 0, 0, 0)",
        plot_bgcolor="rgba(0, 0, 0, 0)",
        xaxis=dict(showline=True, **theme["axis"]),
        yaxis=dict(showline=True, **theme["axis"]),
    )
    fig.write_html(output_dir / theme["filename"])

വിതരണം ഏകതാനമാകുമ്പോൾ അത് പരമാവധി ആയും, ഏകദേശം നിർണ്ണായകമാകുമ്പോൾ ഏറ്റവും കുറഞ്ഞതായും കാണാം.

പ്രിഫിക്സ്-ഫ്രീ കോഡുകൾ

നമുക്ക് എന്ന ചിഹ്നങ്ങളുടെ ഒരു കൂട്ടം ഉണ്ടെന്ന് കരുതുക, അത് ഒരു ബൈനറി ചാനലിലൂടെ അയയ്ക്കാൻ ആഗ്രഹിക്കുന്നു. ഓരോ തവണയും അല്ലെങ്കിൽ അയയ്ക്കാൻ കഴിയുന്ന വിധത്തിലാണ് ഞങ്ങൾ ചാനൽ നിർമ്മിക്കുന്നത്. -നായി ഒരു ഒപ്റ്റിമൽ എൻകോഡിംഗ് സ്കീം കണ്ടെത്താൻ ഞങ്ങൾ ആഗ്രഹിക്കുന്നു, ഒരു ആവശ്യകതയോടെ: അത് പ്രിഫിക്സ്-ഫ്രീ ആയിരിക്കണം.

ഒരു എൻകോഡിംഗ് ഫംഗ്ഷൻ നിർവചിക്കാം, അത് ചിഹ്നങ്ങളെ നീളമുള്ള ബൈനറി സ്ട്രിംഗുകളിലേക്ക് മാപ്പ് ചെയ്യുന്നു. ഒരു കോഡ് വാക്ക് മറ്റൊന്നിന്റെ പ്രിഫിക്സ് അല്ലെങ്കിൽ ഒരു എൻകോഡിംഗിനെ പ്രിഫിക്സ്-ഫ്രീ എന്ന് പറയുന്നു. ഉദാഹരണത്തിന്, പ്രിഫിക്സ് ഫ്രീ അല്ല, കാരണം എന്നത് ന്റെ ഒരു പ്രിഫിക്സ് ആണ്. എന്നാൽ ആണ്.

ഒരു പ്രിഫിക്സ് ഫ്രീ കോഡ് എന്നാൽ കോഡ് അദ്വിതീയമായി ഡീകോഡ് ചെയ്യാവുന്നതാണ് എന്നാണ്, ചിഹ്നങ്ങൾക്കിടയിൽ അധിക ഡിലിമിറ്ററുകളില്ലാതെ, അത് ഒരു ആവശ്യമായ സ്വഭാവമാണ്.

ഒരു ബൈനറി പ്രിഫിക്സ് കോഡ് ഒരു ബൈനറി ട്രീയാൽ അദ്വിതീയമായി നിർവചിക്കപ്പെടുന്നുവെന്നും ഞങ്ങൾ ശ്രദ്ധിക്കുന്നു:

പ്രിഫിക്സ് കോഡിന്റെ ബൈനറി ട്രീ

ഇവിടെ റൂട്ട്-ടു-സിംബൽ പാത കോഡ് വാക്ക് നിർണ്ണയിക്കുന്നു, ചിഹ്നങ്ങൾ എല്ലായ്പ്പോഴും ഇലകളാണ്. ഇതുപോലുള്ള ഏത് നിർമ്മാണവും ഒരു പ്രിഫിക്സ് കോഡിലേക്ക് നയിക്കുന്നുവെന്ന് നിങ്ങൾ സ്വയം ബോധ്യപ്പെടുത്തുക.

എന്നതിന് മുകളിലുള്ള ഏത് പ്രിഫിക്സ് കോഡിന്റെയും പ്രതീക്ഷിക്കപ്പെടുന്ന കോഡ് വാക്ക് നീളം എന്നത് ഇനിപ്പറയുന്ന രീതിയിൽ പരിമിതപ്പെടുത്തിയിരിക്കുന്നുവെന്ന് ഞങ്ങൾ ഇപ്പോൾ കാണിക്കും:

ഇവിടെ എന്നത് എന്ന സാധ്യതകളോടെ സെറ്റിൽ നിന്നുള്ള മൂല്യങ്ങൾ എടുക്കുന്ന ഒരു റാൻഡം വേരിയബിളാണ്. ഏറ്റവും പ്രധാനമായി, ന്റെ എൻട്രോപ്പി ഒരു വിതരണം എത്രമാത്രം കംപ്രസ് ചെയ്യാമെന്നതിനുള്ള താഴ്ന്ന പരിധിയാണ്, അല്ലെങ്കിൽ തുല്യമായി, അതിൽ എത്ര വിവരങ്ങൾ അടങ്ങിയിരിക്കുന്നു എന്നതിനുള്ള താഴ്ന്ന പരിധിയാണ്.

ക്രാഫ്റ്റിന്റെ അസമത്വം

ക്രാഫ്റ്റ് അസമത്വ തെളിവിന്റെ ബൈനറി ട്രീ ദൃശ്യവൽക്കരണം
ക്രാഫ്റ്റ് അസമത്വ തെളിവിന്റെ ബൈനറി ട്രീ ദൃശ്യവൽക്കരണം
ക്രാഫ്റ്റിന്റെ അസമത്വത്തിനുള്ള ഉദാഹരണ വൃക്ഷം

എന്നത് ആം കോഡ് വാക്കിന്റെ നീളമായിരിക്കട്ടെ. കോഡ് പ്രിഫിക്സ്-ഫ്രീ ആണെങ്കിൽ:

തെളിവ്:

ഏറ്റവും നീളമുള്ള കോഡ് വാക്കിന്റെ നീളമായിരിക്കട്ടെ. നമുക്ക് ശ്രദ്ധിക്കാം:

  1. ലെവലിൽ പരമാവധി നോഡുകൾ ഉണ്ടാകും.
  2. നീളമുള്ള ഏതൊരു കോഡ് വാക്കിനും, ലെവലിൽ സന്തതികൾ ഉണ്ടാകും.
  3. ഓരോ കോഡ് വാക്കിന്റെയും സന്തതികളുടെ കൂട്ടങ്ങൾ പരസ്പരം വിഭജിക്കുന്നവയാണ് (ഒരു കോഡ് വാക്ക് മറ്റൊന്നിന്റെ സന്തതിയാകില്ല എന്നതിനാൽ).

ഇവയിൽ നിന്ന് ലഭിക്കുന്നത്:

എന്തുകൊണ്ട് എന്നതിനു പകരം ? കാരണം, ലെവലിലുള്ള ഒരു നോഡ് ഏതൊരു കോഡ് വാക്കിന്റെയും സന്തതിയാകാതിരിക്കാം (കോഡ് എന്ന വൃക്ഷം പരിഗണിക്കുക)!

L-ന്റെ താഴ്ന്ന പരിധി

ഇനി, പ്രതീക്ഷിക്കുന്ന കോഡ് വാക്ക് നീളം പരിഗണിക്കാം

എൻട്രോപ്പി -ന്റെ താഴ്ന്ന പരിധിയാണെന്ന് കാണിക്കാം, അതായത്

തെളിവ്:

ഇവിടെ അവസാനത്തെ അസമത്വം രണ്ട് കാരണങ്ങളാൽ: 1) KL ഡൈവർജൻസ് നോൺ-നെഗറ്റീവ് ആയതിനാൽ, 2) ക്രാഫ്റ്റിന്റെ അസമത്വം മൂലം ആയതിനാൽ. ശ്രദ്ധിക്കേണ്ട ഒരു കാര്യം, ആണെങ്കിൽ ആകും, അത് സിദ്ധാന്തപരമായ ഏറ്റവും കുറഞ്ഞ മൂല്യമാണ്. എന്നാൽ ഈ മൂല്യം എല്ലായ്പ്പോഴും കൈവരിക്കാൻ കഴിയാത്തതിന് കാരണം ഒരു പൂർണ്ണസംഖ്യയാകണമെന്നില്ല എന്നതാണ്, അത് വ്യക്തമായും ആവശ്യമാണ്.

L-ന്റെ ഒരു മുകൾ പരിധി

നീളങ്ങൾ

ഉള്ള ഒരു പ്രിഫിക്സ് കോഡ് നിർമ്മിക്കാൻ സാധിക്കും, കാരണം അവ ക്രാഫ്റ്റിന്റെ അസമത്വം തൃപ്തിപ്പെടുത്തുന്നു:

സീലിംഗ് ഫംഗ്ഷന്റെ നിർവചനം അനുസരിച്ച്

-ന്റെ പ്രതീക്ഷ എടുക്കുമ്പോൾ, നമുക്ക് ലഭിക്കുന്നത്

ഇത് എന്നത് L-ന്റെ ഒരു നല്ല മുകൾ പരിധിയാണെന്ന് കാണിക്കുന്നു!

സംഗ്രഹത്തിൽ, എൻട്രോപ്പി ഒരു താഴ്ന്ന പരിധിയും, ഒരു വിതരണം ഒരു പ്രിഫിക്സ് കോഡായി എൻകോഡ് ചെയ്യാൻ ആവശ്യമായ ബിറ്റുകളുടെ ശരാശരി എണ്ണത്തിനുള്ള ഒരു യുക്തിസഹമായ കണക്കാണ്.

അവലംബങ്ങൾ

  • അലോൺ ഓർലിറ്റ്സ്കി യുടെ ഇസിഇ 255എ പ്രഭാഷണങ്ങൾ, യുസിഎസ്ഡി
  • കവർ, ടി. എം., & തോമസ്, ജെ. എ. (2006). ഇൻഫർമേഷൻ തിയറിയുടെ ഘടകങ്ങൾ. വൈലി-ഇന്റർസയൻസ്.

✦ ഈ ലേഖനത്തിന്റെ ആശയരൂപീകരണം, ഗവേഷണം, എഴുത്ത്, അല്ലെങ്കിൽ എഡിറ്റിംഗ് എന്നിവയിൽ LLM-കൾ ഉപയോഗിച്ചിട്ടില്ല.