2000-ਡਾਇਮੈਂਸ਼ਨਲ ਹਨੇਰੇ ਕਮਰੇ ਵਿੱਚ ਇੱਕ ਕਾਲੀ ਬਿੱਲੀ ਦੀ ਭਾਲ
ਮੈਂ ਮਸ਼ੀਨ ਲਰਨਿੰਗ ਐਲਗੋਰਿਦਮਾਂ (algorithms) ਲਈ ਇੱਕ ਸਟ੍ਰੈੱਸ ਟੈਸਟ (stress test) ਕੀਤਾ।
ਜ਼ਿਆਦਾਤਰ ਬੈਂਚਮਾਰਕ (benchmarks) ਬੋਰਿੰਗ ਹੁੰਦੇ ਹਨ। ਉਹ MNIST ਜਾਂ Titanic ਵਰਗੇ ਸਧਾਰਨ ਡੇਟਾਸੈਟਸ ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹਨ। ਮੈਂ ਮਾਡਲਾਂ ਨੂੰ ਉਹਨਾਂ ਦੀ ਅੰਤਿਮ ਸੀਮਾ ਤੱਕ ਲੈ ਕੇ ਜਾਣਾ ਚਾਹੁੰਦਾ ਸੀ।
ਮੈਂ 21 ਐਲਗੋਰਿਦਮਾਂ ਨੂੰ ਇੱਕ ਦੂਜੇ ਦੇ ਸਾਹਮਣੇ ਲੜਾਇਆ। ਇਸ ਵਿੱਚ ਸ਼ਾਮਲ ਸਨ:
- ਰਵਾਇਤੀ ਮਾਡਲ: Linear Regression, k-NN, SVR.
- Tree ensembles: Random Forest, ExtraTrees.
- Boosting heavyweights: XGBoost, LightGBM, CatBoost, HistGradientBoosting.
- Neural Networks: Multi-layer perceptrons ਅਤੇ TabNet.
- ਅਨਪਛਾਤਾ (The underdog): Polyharmonic Cascade.
ਕੰਮ ਸਧਾਰਨ ਲੱਗ ਰਿਹਾ ਸੀ। ਮੈਂ ਮਾਡਲਾਂ ਨੂੰ ਇੱਕ ਗੁੰਝਲਦਾਰ 3D ਸਤਹ (surface) ਸਿੱਖਣ ਲਈ ਕਿਹਾ। ਪਰ ਫਿਰ ਮੈਂ ਦੋ ਵੱਡੀਆਂ ਰੁਕਾਵਟਾਂ ਪਾਈਆਂ:
Dimensionality Noise: ਮੈਂ ਉਹਨਾਂ ਨੂੰ 2,000 ਫੀਚਰਸ (features) ਦਿੱਤੇ। ਸਿਰਫ਼ ਦੋ ਹੀ ਅਸਲੀ ਸਨ। ਬਾਕੀ 1,998 ਸਿਰਫ਼ ਨੋਇਜ਼ (noise) ਸਨ। ਇਹ ਜੈਨੋਮਿਕਸ (genomics) ਜਾਂ ਸੈਂਸਰ ਰੀਡਿੰਗਸ ਵਰਗੇ ਅਸਲ ਦੁਨੀਆ ਦੇ ਡੇਟਾ ਦੀ ਨਕਲ ਕਰਦਾ ਹੈ।
Coordinate Rotation: ਮੈਂ ਪੂਰੇ ਫੀਚਰ ਸਪੇਸ (feature space) ਨੂੰ ਘੁਮਾ ਦਿੱਤਾ। ਇਸਦਾ ਮਤਲਬ ਸੀ ਕਿ ਲਾਭਦਾਇਕ ਸਿਗਨਲ ਹੁਣ ਕਿਸੇ ਇੱਕ ਕਾਲਮ ਦੇ ਨਾਲ ਅਨੁਕੂਲ ਨਹੀਂ ਸੀ। ਇਹ ਸਾਰੇ 2,000 ਡਾਇਮੈਂਸ਼ਨਾਂ ਵਿੱਚ ਫੈਲ ਗਿਆ ਸੀ।
ਨਤੀਜੇ ਹੈਰਾਨ ਕਰਨ ਵਾਲੇ ਸਨ।
XGBoost ਅਤੇ LightGBM ਵਰਗੇ Tree-based ਮਾਡਲ ਟੈਬੂਲਰ ਡੇਟਾ (tabular data) ਦੇ ਰਾਜੇ ਹਨ। ਜਦੋਂ ਡੇਟਾ ਕਾਲਮਾਂ ਦੇ ਅਨੁਕੂਲ ਹੁੰਦਾ ਹੈ, ਤਾਂ ਉਹ ਜਿੱਤ ਜਾਂਦੇ ਹਨ। ਪਰ ਜਦੋਂ ਮੈਂ ਸਪੇਸ ਨੂੰ ਘੁਮਾਇਆ, ਤਾਂ ਉਹ ਫੇਲ੍ਹ ਹੋ ਗਏ। ਉਹ ਨੋਇਜ਼ ਵਿੱਚੋਂ ਸਿਗਨਲ ਨਹੀਂ ਲੱਭ ਸਕੇ।
Neural networks ਘੁੰਮਾਅ (rotation) ਤੋਂ ਬਚ ਗਏ, ਪਰ ਉਹਨਾਂ ਨੂੰ ਉੱਚੀ ਡਾਇਮੈਂਸ਼ਨੈਲਿਟੀ (high dimensionality) ਨਾਲ ਸੰਘਰਸ਼ ਕਰਨਾ ਪਿਆ। ਜਿਵੇਂ-ਜਿਵੇਂ ਨੋਇਜ਼ ਵਧਿਆ, ਉਹ ਹੌਲੀ ਹੋ ਗਏ ਅਤੇ ਉਹਨਾਂ ਦੀ ਸ਼ੁੱਧਤਾ (accuracy) ਘਟ ਗਈ।
ਫਿਰ Polyharmonic Cascade ਸੀ।
ਇਹ ਮਾਡਲ ਸਟੈਂਡਰਡ ਗ੍ਰੇਡੀਐਂਟ ਡੀਸੈਂਟ (gradient descent) ਦੀ ਵਰਤੋਂ ਨਹੀਂ ਕਰਦਾ। ਇਹ ਰੈਂਡਮ ਫੰਕਸ਼ਨ ਥਿਊਰੀ (random function theory) 'ਤੇ ਅਧਾਰਤ ਸ਼ੁੱਧ ਗਣਿਤ ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹੈ। ਜਦੋਂ ਭਾਰੀ ਮਾਡਲ ਫੇਲ੍ਹ ਹੋ ਗਏ, ਤਾਂ Cascade ਨੇ ਸ਼ਾਨਦਾਰ ਪ੍ਰਦਰਸ਼ਨ ਕੀਤਾ। ਇਸਨੇ ਘੁੰਮਾਅ ਅਤੇ 2,000 ਫੀਚਰਸ ਨੂੰ ਆਸਾਨੀ ਨਾਲ ਸੰਭਾਲ ਲਿਆ। ਇਸਨੇ ਸਭ ਤੋਂ ਔਖੇ ਰਾਊਂਡਾਂ ਵਿੱਚ ਲਗਭਗ ਹਰ ਹੋਰ ਪ੍ਰਤੀਯੋਗੀ ਨੂੰ ਪਛਾੜ ਦਿੱਤਾ।
ਸਬਕ ਸਪੱਸ਼ਟ ਹੈ: ਆਧੁਨਿਕ ਟੈਬੂਲਰ ML ਅਕਸਰ ਐਕਸਿਸ-ਡਿਪੈਂਡੈਂਟ (axis-dependent) ਹੁੰਦਾ ਹੈ। ਇਹ ਉਦੋਂ ਤੱਕ ਬਹੁਤ ਵਧੀਆ ਕੰਮ ਕਰਦਾ ਹੈ ਜਦੋਂ ਤੱਕ ਤੁਹਾਡੇ ਡੇਟਾ ਦੀ ਜਿਓਮੈਟਰੀ (geometry) ਨਹੀਂ ਬਦਲਦੀ। ਜੇਕਰ ਤੁਸੀਂ ਗੁੰਝਲਦਾਰ, ਘੁੰਮੇ ਹੋਏ, ਜਾਂ ਬਹੁਤ ਜ਼ਿਆਦਾ ਨੋਇਜ਼ ਵਾਲੇ ਡੇਟਾ ਨਾਲ ਕੰਮ ਕਰਦੇ ਹੋ, ਤਾਂ ਤੁਹਾਡੇ ਸਟੈਂਡਰਡ ਟੂਲ ਤੁਹਾਨੂੰ ਨਿਰਾਸ਼ ਕਰ ਸਕਦੇ ਹਨ।
ਤੁਸੀਂ ਪੂਰਾ ਕੋਡ ਅਤੇ ਨਤੀਜੇ GitHub 'ਤੇ ਲੱਭ ਸਕਦੇ ਹੋ। ਮੈਂ ਤੁਹਾਨੂੰ ਇਸ ਪ੍ਰਯੋਗ ਨੂੰ ਦੁਹਰਾਉਣ ਲਈ ਸੱਦਾ ਦਿੰਦਾ ਹਾਂ।
Optional learning community: https://t.me/GyaanSetuAi
