نویسنده (ها): ngoc doan
در ابتدا منتشر شده در به سمت هوش مصنوعیبشر
اگرچه توزیع های عادی متداول ترین مورد استفاده هستند ، اما بسیاری از داده های واقعی در دنیای واقعی متأسفانه طبیعی نیست. در صورت مواجهه با داده های بسیار ناچیز ، ما برای استفاده از تحولات ورود به سیستم برای عادی سازی توزیع و تثبیت واریانس برای ما وسوسه انگیز است. من به تازگی روی یک پروژه کار کرده ام که مصرف انرژی مدل های AI را با استفاده از داده های Epoch AI تجزیه و تحلیل می کند [1]بشر هیچ اطلاعات رسمی در مورد مصرف انرژی از هر مدل وجود ندارد ، بنابراین من آن را با ضرب و شتم قدرت هر مدل با زمان آموزش آن محاسبه کردم. متغیر جدید ، انرژی (در کیلووات ساعت) ، به همراه برخی از مناطق خارج از حد شدید و بیش از حد اسپری ، بسیار مناسب بود (شکل 1).
برای پرداختن به این ناهمگونی و ناهمگونی ، اولین غریزه من استفاده از تغییر ورود به سیستم در متغیر انرژی بود. توزیع log (انرژی) بسیار طبیعی تر به نظر می رسید (شکل 2) ، و یک آزمایش شاپیرو-ویلک عادی بودن مرزی را تأیید کرد (0.5 p P)
DILEMMA مدل سازی: پیوند ورود به سیستم در مقابل لینک ورود
تجسم خوب به نظر می رسید ، اما وقتی به مدل سازی حرکت کردم ، با یک معضل روبرو شدم: آیا باید مدل کنم متغیر پاسخ تبدیل شده به سیستم (log (y) ~ x)با یا باید مدل کنم متغیر پاسخ اصلی با استفاده از a تابع پیوند ورود به سیستم (y ~ x ، پیوند = “log”)؟ من همچنین دو توزیع – توزیع گاوسی (عادی) و گاما را در نظر گرفتم و هر توزیع را با هر دو رویکرد ورود به سیستم ترکیب کردم. این چهار مدل مختلف به من داد ، همه با استفاده از مدل های خطی عمومی R (GLM) متناسب با R:
all_gaussian_log_link glm(Energy_kWh ~ Parameters +
Training_compute_FLOP +
Training_dataset_size +
Training_time_hour +
Hardware_quantity +
Training_hardware,
family = gaussian(link = "log"), data = df)
all_gaussian_log_transform glm(log(Energy_kWh) ~ Parameters +
Training_compute_FLOP +
Training_dataset_size +
Training_time_hour +
Hardware_quantity +
Training_hardware,
data = df)
all_gamma_log_link glm(Energy_kWh ~ Parameters +
Training_compute_FLOP +
Training_dataset_size +
Training_time_hour +
Hardware_quantity +
Training_hardware + 0,
family = Gamma(link = "log"), data = df)
all_gamma_log_transform glm(log(Energy_kWh) ~ Parameters +
Training_compute_FLOP +
Training_dataset_size +
Training_time_hour +
Hardware_quantity +
Training_hardware + 0,
family = Gamma(), data = df)
مقایسه مدل: توطئه های AIC و تشخیصی
من چهار مدل را با استفاده از معیار اطلاعات Akaike (AIC) مقایسه کردم ، که یک تخمین خطای پیش بینی است. به طور معمول ، هرچه AIC پایین تر باشد ، مدل متناسب است.
AIC(all_gaussian_log_link, all_gaussian_log_transform, all_gamma_log_link, all_gamma_log_transform)df AIC
all_gaussian_log_link 25 2005.8263
all_gaussian_log_transform 25 311.5963
all_gamma_log_link 25 1780.8524
all_gamma_log_transform 25 352.5450
در بین چهار مدل ، مدل هایی که از نتایج تغییر یافته ورود به سیستم استفاده می کنند ، مقادیر AIC بسیار کمتری نسبت به مدل هایی دارند که از پیوندهای ورود به سیستم استفاده می کنند. از آنجا که تفاوت در AIC بین مدل های ورود به سیستم و ورود به سیستم قابل توجه بود (311 و 352 در مقابل 1780 و 2005) ، من همچنین توطئه های تشخیصی را بررسی کردم تا اعتبار بیشتری را تأیید کنم که مدل های تبدیل شده به سیستم متناسب هستند:
بر اساس مقادیر AIC و توطئه های تشخیصی ، تصمیم گرفتم با مدل گاما با ورود به سیستم به جلو حرکت کنم ، زیرا این مقدار کمترین مقدار AIC را دارد و باقیمانده های آن در مقابل طرح مناسب بهتر از مدل گاوسی تبدیل شده به نظر می رسد.
من به بررسی اینکه کدام متغیرهای توضیحی مفید بوده و کدام تعامل ممکن است معنی دار باشد ، ادامه دادم. مدل نهایی که من انتخاب کردم این بود:
glm(formula = log(Energy_kWh) ~ Training_time_hour * Hardware_quantity +
Training_hardware + 0, family = Gamma(), data = df)
ضرایب تفسیر
با این حال ، هنگامی که من شروع به تفسیر ضرایب مدل کردم ، چیزی احساس خاموش شد. از آنجا که فقط متغیر پاسخ به سیستم تبدیل شده است ، اثرات پیش بینی کننده ها چند برابر هستند ، و ما باید ضرایب را بازنمایی کنیم تا آنها را به مقیاس اصلی تبدیل کنیم. افزایش یک واحدی در 𝓍 نتیجه را ضرب می کند 𝓎 توسط exp (β) ، یا هر واحد اضافی در 𝓍 منجر به تغییر (Exp (β)-1) × 100 ٪ تغییر در 𝓎 می شود. [2]بشر
با نگاهی به جدول نتایج مدل زیر ، ما داریم Training_Time_Hour ، Hardware_quantity ، و اصطلاح تعامل آنها Training_Time_Hour: Hardware_quantity متغیرهای مداوم هستند ، بنابراین ضرایب آنها دامنه ها را نشان می دهد. در همین حال ، از آنجا که من +0 را در فرمول مدل مشخص کردم ، تمام سطوح طبقه بندی training_hardware به عنوان رهگیری عمل می کند ، به این معنی که هر نوع سخت افزار به عنوان رهگیری β₀ عمل می کند وقتی که متغیر ساختگی مربوطه آن فعال باشد.
> glm(formula = log(Energy_kWh) ~ Training_time_hour * Hardware_quantity +
Training_hardware + 0, family = Gamma(), data = df)Coefficients:
Estimate Std. Error t value Pr(>|t|)
Training_time_hour -1.587e-05 3.112e-06 -5.098 5.76e-06 ***
Hardware_quantity -5.121e-06 1.564e-06 -3.275 0.00196 **
Training_hardwareGoogle TPU v2 1.396e-01 2.297e-02 6.079 1.90e-07 ***
Training_hardwareGoogle TPU v3 1.106e-01 7.048e-03 15.696 2e-16 ***
Training_hardwareGoogle TPU v4 9.957e-02 7.939e-03 12.542 2e-16 ***
Training_hardwareHuawei Ascend 910 1.112e-01 1.862e-02 5.969 2.79e-07 ***
Training_hardwareNVIDIA A100 1.077e-01 6.993e-03 15.409 2e-16 ***
Training_hardwareNVIDIA A100 SXM4 40 GB 1.020e-01 1.072e-02 9.515 1.26e-12 ***
Training_hardwareNVIDIA A100 SXM4 80 GB 1.014e-01 1.018e-02 9.958 2.90e-13 ***
Training_hardwareNVIDIA GeForce GTX 285 3.202e-01 7.491e-02 4.275 9.03e-05 ***
Training_hardwareNVIDIA GeForce GTX TITAN X 1.601e-01 2.630e-02 6.088 1.84e-07 ***
Training_hardwareNVIDIA GTX Titan Black 1.498e-01 3.328e-02 4.501 4.31e-05 ***
Training_hardwareNVIDIA H100 SXM5 80GB 9.736e-02 9.840e-03 9.894 3.59e-13 ***
Training_hardwareNVIDIA P100 1.604e-01 1.922e-02 8.342 6.73e-11 ***
Training_hardwareNVIDIA Quadro P600 1.714e-01 3.756e-02 4.562 3.52e-05 ***
Training_hardwareNVIDIA Quadro RTX 4000 1.538e-01 3.263e-02 4.714 2.12e-05 ***
Training_hardwareNVIDIA Quadro RTX 5000 1.819e-01 4.021e-02 4.524 3.99e-05 ***
Training_hardwareNVIDIA Tesla K80 1.125e-01 1.608e-02 6.993 7.54e-09 ***
Training_hardwareNVIDIA Tesla V100 DGXS 32 GB 1.072e-01 1.353e-02 7.922 2.89e-10 ***
Training_hardwareNVIDIA Tesla V100S PCIe 32 GB 9.444e-02 2.030e-02 4.653 2.60e-05 ***
Training_hardwareNVIDIA V100 1.420e-01 1.201e-02 11.822 8.01e-16 ***
Training_time_hour:Hardware_quantity 2.296e-09 9.372e-10 2.450 0.01799 *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for Gamma family taken to be 0.05497984)
Null deviance: NaN on 70 degrees of freedom
Residual deviance: 3.0043 on 48 degrees of freedom
AIC: 345.39
هنگام تبدیل دامنه ها به درصد تغییر در متغیر پاسخ ، تأثیر هر متغیر مداوم تقریباً صفر بود ، حتی کمی منفی:
تمام رهگیری ها نیز در مقیاس اصلی به حدود 1 کیلووات ساعت به حدود 1 کیلووات ساعت تبدیل شدند. نتایج معنی ندارد زیرا حداقل یکی از دامنه ها باید همراه با مصرف عظیم انرژی رشد کند. من نمی دانم که آیا استفاده از مدل log-link با همان پیش بینی کننده ها ممکن است نتایج متفاوتی به همراه داشته باشد ، بنابراین من دوباره مدل را متناسب می کنم:
glm(formula = Energy_kWh ~ Training_time_hour * Hardware_quantity +
Training_hardware + 0, family = Gamma(link = "log"), data = df)Coefficients:
Estimate Std. Error t value Pr(>|t|)
Training_time_hour 1.818e-03 1.640e-04 11.088 7.74e-15 ***
Hardware_quantity 7.373e-04 1.008e-04 7.315 2.42e-09 ***
Training_hardwareGoogle TPU v2 7.136e+00 7.379e-01 9.670 7.51e-13 ***
Training_hardwareGoogle TPU v3 1.004e+01 3.156e-01 31.808 2e-16 ***
Training_hardwareGoogle TPU v4 1.014e+01 4.220e-01 24.035 2e-16 ***
Training_hardwareHuawei Ascend 910 9.231e+00 1.108e+00 8.331 6.98e-11 ***
Training_hardwareNVIDIA A100 1.028e+01 3.301e-01 31.144 2e-16 ***
Training_hardwareNVIDIA A100 SXM4 40 GB 1.057e+01 5.635e-01 18.761 2e-16 ***
Training_hardwareNVIDIA A100 SXM4 80 GB 1.093e+01 5.751e-01 19.005 2e-16 ***
Training_hardwareNVIDIA GeForce GTX 285 3.042e+00 1.043e+00 2.916 0.00538 **
Training_hardwareNVIDIA GeForce GTX TITAN X 6.322e+00 7.379e-01 8.568 3.09e-11 ***
Training_hardwareNVIDIA GTX Titan Black 6.135e+00 1.047e+00 5.862 4.07e-07 ***
Training_hardwareNVIDIA H100 SXM5 80GB 1.115e+01 6.614e-01 16.865 2e-16 ***
Training_hardwareNVIDIA P100 5.715e+00 6.864e-01 8.326 7.12e-11 ***
Training_hardwareNVIDIA Quadro P600 4.940e+00 1.050e+00 4.705 2.18e-05 ***
Training_hardwareNVIDIA Quadro RTX 4000 5.469e+00 1.055e+00 5.184 4.30e-06 ***
Training_hardwareNVIDIA Quadro RTX 5000 4.617e+00 1.049e+00 4.401 5.98e-05 ***
Training_hardwareNVIDIA Tesla K80 8.631e+00 7.587e-01 11.376 3.16e-15 ***
Training_hardwareNVIDIA Tesla V100 DGXS 32 GB 9.994e+00 6.920e-01 14.443 2e-16 ***
Training_hardwareNVIDIA Tesla V100S PCIe 32 GB 1.058e+01 1.047e+00 10.105 1.80e-13 ***
Training_hardwareNVIDIA V100 9.208e+00 3.998e-01 23.030 2e-16 ***
Training_time_hour:Hardware_quantity -2.651e-07 6.130e-08 -4.324 7.70e-05 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for Gamma family taken to be 1.088522)
Null deviance: 2.7045e+08 on 70 degrees of freedom
Residual deviance: 1.0593e+02 on 48 degrees of freedom
AIC: 1775
این بار ، زمان آموزش وت سخت افزاری_ کیفیت مصرف کل انرژی را 0.18 ٪ در هر ساعت اضافی و 0.07 ٪ در هر تراشه اضافی افزایش می دهد. در همین حال ، تعامل آنها باعث کاهش مصرف انرژی با 10 × 2 ٪ می شود. این نتایج بیشتر به عنوان زمان آموزش می تواند تا 7000 ساعت برسد و سخت افزاری_ کیفیت حداکثر 16000 واحد.
برای تجسم بهتر تفاوت ها ، من دو قطعه را با مقایسه پیش بینی ها (به عنوان خطوط متراکم) از هر دو مدل ایجاد کردم. پانل سمت چپ از مدل GAMMA GLM تبدیل شده به سیستم استفاده می کرد ، جایی که خطوط متراکم تقریباً مسطح و نزدیک به صفر بودند ، هیچ جا در نزدیکی خطوط جامد متناسب با داده های خام. از طرف دیگر ، پانل سمت راست از مدل گاما GLM گاما مرتبط با ورود به سیستم استفاده می کرد ، جایی که خطوط متراکم بسیار نزدیکتر با خطوط مجهز واقعی هماهنگ بودند.
test_data df[, c("Training_time_hour", "Hardware_quantity", "Training_hardware")]
prediction_data df %>%
mutate(
pred_energy1 = exp(predict(glm3, newdata = test_data)),
pred_energy2 = predict(glm3_alt, newdata = test_data, type = "response"),
)
y_limits c(min(df$Energy_KWh, prediction_data$pred_energy1, prediction_data$pred_energy2),
max(df$Energy_KWh, prediction_data$pred_energy1, prediction_data$pred_energy2))p1 ggplot(df, aes(x = Hardware_quantity, y = Energy_kWh, color = Training_time_group)) +
geom_point(alpha = 0.6) +
geom_smooth(method = "lm", se = FALSE) +
geom_smooth(data = prediction_data, aes(y = pred_energy1), method = "lm", se = FALSE,
linetype = "dashed", size = 1) +
scale_y_log10(limits = y_limits) +
labs(x="Hardware Quantity", y = "log of Energy (kWh)") +
theme_minimal() +
theme(legend.position = "none")
p2 ggplot(df, aes(x = Hardware_quantity, y = Energy_kWh, color = Training_time_group)) +
geom_point(alpha = 0.6) +
geom_smooth(method = "lm", se = FALSE) +
geom_smooth(data = prediction_data, aes(y = pred_energy2), method = "lm", se = FALSE,
linetype = "dashed", size = 1) +
scale_y_log10(limits = y_limits) +
labs(x="Hardware Quantity", color = "Training Time Level") +
theme_minimal() +
theme(axis.title.y = element_blank())
p1 + p2
چرا تحول ورود به سیستم انجام نمی شود
برای درک دلیل اینکه مدل تبدیل شده به ورود به سیستم نمی تواند جلوه های اصلی را به عنوان یک ورود به سیستم ضبط کند ، بیایید آنچه را که اتفاق می افتد هنگام تحول ورود به متغیر پاسخ ، طی کنیم:
بیایید بگوییم y برابر با برخی از عملکردهای x به علاوه اصطلاح خطا است:
هنگامی که ما یک ورود به سیستم را به Y اعمال می کنیم ، در واقع هم F (x) و هم خطا را فشرده می کنیم:
این بدان معناست که ما در حال مدل سازی یک متغیر پاسخ کاملاً جدید ، log (y) هستیم. وقتی عملکرد خودمان را G (x) وصل می کنیم – در مورد من g (x) = training_time_hour*hardware_quantity + training_hardware – در تلاش است تا اثرات ترکیبی از “کوچک” F (x) و اصطلاح خطا را ضبط کند.
در مقابل ، هنگامی که ما از یک لینک ورود به سیستم استفاده می کنیم ، ما هنوز در حال مدل سازی Y اصلی هستیم ، نه نسخه تبدیل شده. در عوض ، مدل از عملکرد خود ما G (x) برای پیش بینی Y استفاده می کند.
سپس مدل تفاوت بین Y واقعی و Y را به حداقل می رساند. از این طریق ، اصطلاحات خطا در مقیاس اصلی دست نخورده باقی می ماند:
پایان
انتقال ورود به سیستم با استفاده از لینک ورود به سیستم یکسان نیست و ممکن است همیشه نتایج قابل اعتماد داشته باشد. در زیر کاپوت ، یک تغییر ورود به سیستم متغیر را تغییر می دهد و هم تغییر و هم نویز را تحریف می کند. درک این تفاوت ظریف ریاضی در پشت مدل های شما به همان اندازه مهم است که سعی در یافتن مدل مناسب پیدا کنید.
[1] EPOCH AI. اطلاعات مربوط به مدل های قابل توجه AIبشر برگرفته از https://epoch.ai/data/notable-ai-models
[2] کتابخانه دانشگاه ویرجینیا. تفسیر تحولات ورود به سیستم در یک مدل خطی. برگرفته از https://library.virginia.edu/data/articles/interpreting-log-transformations-in-a-linear-model
منتشر شده از طریق به سمت هوش مصنوعی